我想将一个numpy数组拆分为两个子数组,其中拆分点基于列ID,即垂直拆分。例如,如果我生成一个形状为[10,16]的numpy数组,并且想通过从列的索引11拆分它来创建两个子数组,那么我应该得到一个大小为[10,10]的子数组,而另一个是从[10,15]开始。因此,我正在关注numpy.hsplit
here,但似乎它只进行偶数拆分(子数组需要相等)。我希望能够:
为了模拟我的请求,以下是我的代码:
import numpy as np
C = [[1,2,3,4],[5,6,7,8],[9,10,11,12], [13,14,15,16]]
C = np.asarray(C)
C = np.hsplit(C, 3)
print(C)
如您所见,除非拆分生成相似的子数组,否则np.hsplit(C, 3)
不起作用。即使我做了np.hsplit(C, 2)
,我也不知道如何提取两个子数组成单独的numpy数组。
要实现我的目标,如何修改此代码?
答案 0 :(得分:1)
使用数组索引。
C[:,:3] # All rows , columns 0 to 2
Out[29]:
array([[ 1, 2, 3],
[ 5, 6, 7],
[ 9, 10, 11],
[13, 14, 15]])
C[:,3:] # All rows column 3 (to end in this case also 3).
Out[30]:
array([[ 4],
[ 8],
[12],
[16]])
答案 1 :(得分:1)
您需要将索引指定为列表:
import numpy as np
C = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
C = np.asarray(C)
C = np.hsplit(C, [3])
print(C)
输出
[array([[ 1, 2, 3],
[ 5, 6, 7],
[ 9, 10, 11],
[13, 14, 15]]), array([[ 4],
[ 8],
[12],
[16]])]