如何从任何列索引垂直拆分numpy数组

时间:2019-01-21 16:26:00

标签: python arrays numpy

我想将一个numpy数组拆分为两个子数组,其中拆分点基于列ID,即垂直拆分。例如,如果我生成一个形状为[10,16]的numpy数组,并且想通过从列的索引11拆分它来创建两个子数组,那么我应该得到一个大小为[10,10]的子数组,而另一个是从[10,15]开始。因此,我正在关注numpy.hsplit here,但似乎它只进行偶数拆分(子数组需要相等)。我希望能够:

  1. 垂直分割任何numpy数组,无论子数组的大小如何。
  2. 提取两个子数组。

为了模拟我的请求,以下是我的代码:

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数组。

要实现我的目标,如何修改此代码?

2 个答案:

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