使用Python

时间:2018-02-22 14:16:39

标签: 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.]]

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

# 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的列。

我怎样才能做到这一点?

我熟悉使用sort的{​​{1}}命令,但我不知道如何将此应用于此方案中的矩阵列。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:-1)

基本上,您的工作是按降序对字符串列表进行排序,获取原始数组中已排序数组的索引,并将其应用于原始numpy数组的每一行。这是

的代码
# This gives indices of array s in descending alphabetical order
s_sorted_indices_desc = np.argsort(np.array(s))[::-1]

# This applies sorting according to the indices obtained above, to each row
X_sorted = np.apply_along_axis(lambda row: row[s_sorted_indices_desc], 1, X)