我有一个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}}命令,但我不知道如何将此应用于此方案中的矩阵列。
答案 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)