我如何用numpy将数组拆分为具有不同维度的子数组?

时间:2018-11-05 16:29:00

标签: python arrays numpy split concatenation

我必须将一个数组划分为维度w=(N,2), b=(N,1), v=(1,N)的3个不同的子数组。之前已将它们与

连接在一起
u= np.concatenate((b,w.flatten(),v),axis=None)

但是现在我需要划分并获得原始的(w,b,v)

我正在尝试np.array_split,但不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

我们可以通过以下方式单独获得这些物品:

b = u[:n].reshape(-1, 1)
v = u[-n:].reshape(1, -1)
w = u[n:-n].reshape(-1, 2)

这是有效的,因为u是具有 4×N 个元素的向量,看起来像:

u = [ b00, b10, …, bn0,
      w00, w01, w10, w11, …, wn0, wn1,
      v00, v01, …, v0n]

因此,需要获取第一个 n 个元素,最后一个 n 个元素以及它们之间的元素。

例如对于n=5,我们可以随机生成三个数组:

>>> w
array([[ 1., -0.],
       [-1.,  2.],
       [ 0., -2.],
       [-1.,  1.],
       [-1., -1.]])
>>> b
array([[ 0.],
       [-1.],
       [-0.],
       [-1.],
       [-0.]])
>>> v
array([[-0., -0., -0., -0., -2.]])

然后u是:

>>> u
array([ 0., -1., -0., -1., -0.,  1., -0., -1.,  2.,  0., -2., -1.,  1.,
       -1., -1., -0., -0., -0., -0., -2.])

我们可以使用以下方式取回数据

>>> u[:n].reshape(-1, 1)  # b
array([[ 0.],
       [-1.],
       [-0.],
       [-1.],
       [-0.]])
>>> u[-n:].reshape(1, -1)  # v
array([[-0., -0., -0., -0., -2.]])
>>> u[n:-n].reshape(-1, 2)  # w
array([[ 1., -0.],
       [-1.,  2.],
       [ 0., -2.],
       [-1.,  1.],
       [-1., -1.]])