使用Python基于列表值对矩阵列进行排序
我有一个使用Python基于列表值对矩阵列进行排序,python,sorting,numpy,matrix,Python,Sorting,Numpy,Matrix,我有一个nx100numpy矩阵,其中包含我想要排序的任何类型的数字 为了更直观,我现在将用虚拟值填充它: 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
nx100
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
的列
我怎样才能做到这一点
我熟悉使用
key
的sort
命令,但我不知道如何将其应用于此场景中的矩阵列。如果您的对象是numpy数组(如X=np.array(X);s=np.array(s)
,然后可以使用np.argsort
,它返回一个索引数组,使输入排序
X_sorted = X[:, np.argsort(s)]
基本上,您的工作是按降序对字符串列表进行排序,获取原始数组中已排序数组的索引,并将其应用于原始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)
你到底在哪里使用numpy?这很重要。这里显示的对象都是列表。
X
是一个numpy矩阵,s
是一个列表。我对Python非常陌生,因此请告诉我如何更改问题中显示的格式,以避免混淆,以防它们以错误的方式显示。尝试打印一个numpy数组并使您的输出匹配。通常有np.array(
或数组(
在数组的开头,表示它是一个数组(当然还有一个匹配的)
)。我编辑了你的帖子,你会看到当它被接受时你是如何格式化的。你认为问题的降序顺序在哪里?第二个操作应该只是一个索引操作。应用完全是多余的。@MadPhysician隐式假设看到蝴蝶的索引是97,而斑马的索引是0Animal索引97.Butterfly使用OP的输入运行索引0Try。您将了解我的意思。非常确定它足以使s
像数组一样,np.argsort
将强制执行。