Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python基于列表值对矩阵列进行排序_Python_Sorting_Numpy_Matrix - Fatal编程技术网

使用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
将强制执行。