python - 使用 Python 根据列表值对矩阵列进行排序

标签 python sorting numpy matrix

我有一个 N x 100 numpy 矩阵,其中包含我想要排序的任何类型的数字。

为了让它更直观,我现在将用虚拟值填充它:

import numpy as np

X = np.array( [[float(number) for number in range(100)] for _ in range(10)] )

# X 
[[   0.    1.    2. ...,   97.   98.  99.]
 [   0.    1.    2. ...,   97.   98.  99.]
 [   0.    1.    2. ...,   97.   98.  99.]
 ..., 
 [   0.    1.    2. ...,   97.   98.  99.]
 [   0.    1.    2. ...,   97.   98.  99.]
 [   0.    1.    2. ...,   97.   98.  99.]]

我想使用以下 100 元素列表作为键对所有 N 行的列进行排序:

# s
["butterfly", "zebra", "cactus", ... "animal", "xylitol", "yoyo"]

所以输出看起来像这样:

# X_sorted
[[   97.    0.    2. ...,   98.   99.  1.]
 [   97.    0.    2. ...,   98.   99.  1.]
 [   97.    0.    2. ...,   98.   99.  1.]
 ..., 
 [   97.    0.    2. ...,   98.   99.  1.]
 [   97.    0.    2. ...,   98.   99.  1.]
 [   97.    0.    2. ...,   98.   99.  1.]]

基本上,我想检索 s 的字母排序输出,并将其应用于 X 的列。

我怎样才能做到这一点?

我熟悉使用 keysort 命令,但我不知道如何将其应用于这种情况下的矩阵列。

最佳答案

如果您的对象是 numpy 数组(如 X = np.array(X); s = np.array(s)),那么您可以使用 np.argsort,它返回一个索引数组,这些索引将使输入排序。

X_sorted = X[:, np.argsort(s)]

关于python - 使用 Python 根据列表值对矩阵列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48929634/

相关文章:

Python dash 服务器未更新

python - Pandas/Python - 使用 stack() groupby() 和 apply() 的性能非常慢

python - 使用 python 中的装饰器发送请求正文

jquery - 我如何使用 jquery tablesorter 存储排序?

python - 将两行打印成单行,但每个源代码行使用交替字符

angular - 在列值更改时禁用 Angular 表的自动排序

java - Hadoop 排序问题(备用标题 : 1175 is not less than 119!)

python - 根据行值将一行插入 Pandas 数据框中?

python - 使用 matplotlib 和 markevery 在特定点放置标记时出错

java - 使用 numpy.fromfile 在 Python 中使用 ObjectOutputStream 读取用 Java 编写的 double 的二进制文件