我正在学习numpy并使用python并寻求帮助。我想将单行或列排序为学习体验。浏览他们的文档,我看到apply_along_axis,但在他们的文档中没有关于如何在选择要应用它的行或列时指示拼接/选择器的参数。
我只想要排序第二行。 到目前为止,这是我的代码......
import numpy as np
A = [29,-11,10,-160,61,-55,55,-21,19]
A = np.asarray(A)
A = np.reshape(A, (3,-1))
np.apply_along_axis(func1d=sorted, axis=1, arr=A) #this line is not correct
从以下数组开始...
array([[ 29, -11, 10],
[-160, 61, -55],
[ 55, -21, 19]])
我想看到以下输出......
array([[ 29, -11, 10],
[-160, -55, 61],
[ 55, -21, 19]])
答案 0 :(得分:4)
这是一种原位排序方法。
In [75]: A=np.array(A).reshape(3,-1)
In [76]: A
Out[76]:
array([[ 29, -11, 10],
[-160, 61, -55],
[ 55, -21, 19]])
In [77]: A[1,:].sort()
In [78]: A
Out[78]:
array([[ 29, -11, 10],
[-160, -55, 61],
[ 55, -21, 19]])
我只是猜测它可以在阵列的一行上工作,并尝试过。它似乎工作。 (我忽视了Divakar的评论)。
apply_along...
和apply_over...
是方便函数,可以更容易(不是更快)迭代一个或多个维度,并在这种情况下过度杀死。
使用np.sort
函数:
In [85]: np.sort(A[1,:])
Out[85]: array([-160, -55, 61])
该函数返回已排序的行的副本;然后,我们可以使用:
将其写回A
In [86]: A[1,:]=np.sort(A[1,:])
numpy
有自己的排序方法,因此通常我们不需要使用常规的Python列表版本,例如sorted
。但是这可行:A[1,:]=sorted(A[1,:])
。