如何使用numpy和python将函数应用于矩阵的单个行或列

时间:2016-09-17 18:20:38

标签: python numpy

我正在学习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]])

1 个答案:

答案 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,:])