首页 > 解决方案 > 如何使用 numpy 将数组拆分为具有不同维度的子数组?

问题描述

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

u= np.concatenate((b,w.flatten(),v),axis=None)

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

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

标签: pythonarraysnumpysplitconcatenation

解决方案


我们可以通过以下方式单独获取这些:

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

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

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.]])

推荐阅读