假设我有一个NumPy
2D
数组A
:
>>> import numpy as np
>>> A=np.arange(30).reshape(3,10)
>>> A
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]])
我需要使用以下属性获取两个数组B
和C
:
B = array([[ 0, 3, 4, 5, 6, 7, 8, 9],
[10, 13, 14, 15, 16, 17, 18, 19],
[20, 23, 24, 25, 26, 27, 28, 29]])
C = array([[ 1, 2],
[11, 12],
[21, 22]])
实现此目标的最简单方法是什么?
请注意,我必须获取C
(2个相邻列)和B
(A
没有C
)的所有集合。我尝试了NumPy
,np.delete
之类的不同np.hstack
构造,但似乎没有像上面示例那样在角落条件下工作。
答案 0 :(得分:11)
最简单的方法之一是使用索引来选择合适的列:
>>> A[:, [1, 2]] # choose all rows from columns 1-2 (gives C)
array([[ 1, 2],
[11, 12],
[21, 22]])
>>> A[:, np.r_[0, 3:10]] # choose all rows from columns 0, 3-9 (gives B)
array([[ 0, 3, 4, 5, 6, 7, 8, 9],
[10, 13, 14, 15, 16, 17, 18, 19],
[20, 23, 24, 25, 26, 27, 28, 29]])
或者,您可以尝试hsplit
分解A
,然后将位连接在一起。这感觉效率低于上面的索引方法:
>>> splits = np.hsplit(A, [1, 3])
>>> B = np.hstack((splits[0], splits[2]))
>>> C = splits[1]
答案 1 :(得分:4)
您可以使用数组花式索引:
B = A[:, [0] + list(range(3, A.shape[1]))]
C = A[:, [1, 2]]
其中:
:
告诉您获取该维度的所有元素[1, 2]
)答案 2 :(得分:3)
对于C
,您可以使用简单的切片:
>>> A[:,1:3]
array([[ 1, 2],
[11, 12],
[21, 22]])
B
在两片A
上使用numpy.hstack
:
>>> np.hstack((A[:,:1], A[:,3:]))
array([[ 0, 3, 4, 5, 6, 7, 8, 9],
[10, 13, 14, 15, 16, 17, 18, 19],
[20, 23, 24, 25, 26, 27, 28, 29]])
>>>