【问题标题】:How could I split an array into subarrays with different dimension with numpy?如何使用 numpy 将数组拆分为具有不同维度的子数组?
【发布时间】:2018-11-05 16:28:59
【问题描述】:

我必须将一个数组划分为 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,但不知道该怎么做。

【问题讨论】:

  • 如果数组具有您所说的形状,那么连接将是不可能的(不同数量的维度和不兼容的形状)。
  • 能否提供一些输入数据和预期输出?
  • 请显示连接的工作示例以及输入数组(随机或范围都可以)。即使您的拆分不起作用,请展示您的尝试。

标签: python arrays numpy split concatenation


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    相关资源
    最近更新 更多