在Python中使用numpy重新排列行元素

时间:2014-02-26 22:07:02

标签: python arrays numpy

我对python很新,所以我很感激我能得到任何帮助。如何重新排列A看起来像B?

A=([3,5,6,9,0,0,0,0,0])
B=([0,0,3,0,5,6,0,0,9])

具体来说,我想使用条目作为索引重新排列A.所以我希望B的第3,第5,第6和第9个元素成为该索引的值。

2 个答案:

答案 0 :(得分:4)

由于这是标记为numpy,这是一个numpy解决方案:

In [11]: A = np.array([3,5,6,9,0,0,0,0,0])

在A:

中提取非零元素的poisition
In [12]: np.nonzero(A)[0]
Out[12]: array([0, 1, 2, 3])

In [13]: ind = A[np.nonzero(A)[0]]

修剪零可能是等效的(取决于游戏规则):

In [14]: np.trim_zeros(A)
Out[14]: array([3, 5, 6, 9])

创建一个零的B,然后用ind:

填充
In [15]: B = np.zeros(A.max() + 1)

In [16]: B[ind] = ind

In [17]: B
Out[17]: array([ 0.,  0.,  0.,  3.,  0.,  5.,  6.,  0.,  0.,  9.])

答案 1 :(得分:2)

我假设您在A中没有任何重复元素或者大于列表A的长度的元素。然后,使用列表理解,

B = [ i if i in A else 0 for i in range(1,10) ]

会起作用。


说明:

首先,列表理解

[i for i in range(1,10)]

给出[1, 2, 3, 4, 5, 6, 7, 8, 9]。如果此列表中的元素不属于列表0,您希望放置A。因此,您将列表解析中的第一个i替换为i if i in A else 0。这意味着如果i属于A,则替代0,{{1}}将保持不变。