将一个NumPy数组拆分为两个数组

pyn*_*bie 14 python arrays numpy

假设我有一个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]])
Run Code Online (Sandbox Code Playgroud)

我需要获得两个数组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]])
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最简单方法是什么?

请注意,我必须获得所有C(2个相邻列)和B(A没有C)的所有集合.我尝试了不同的NumPy结构np.delete,np.hstack但似乎没有像上面的例子那样在拐角条件下工作.

Ale*_*ley 13

最简单的方法之一是使用索引来选择适当的列:

>>> 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]])
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试hsplit分解A,然后将位连接在一起.这感觉效率低于上面的索引方法:

>>> splits = np.hsplit(A, [1, 3]) 
>>> B = np.hstack((splits[0], splits[2]))
>>> C = splits[1]
Run Code Online (Sandbox Code Playgroud)