numpy:将行追加到单个 3D 数组



有许多帖子和博客在讨论如何使用追加、vstack 或连接来操作 2D 数组,但我无法让它在 3D 中工作。

问题假设:

-

-3D 数组将具有 (k, m, 2) 的形状。

-

-k 将是已知值

-

-m 的范围可以从 1 到 n,并且不是预先确定的

In [1]: import numpy as np
In [2]: a = np.empty((3, 1, 2))
Out[2]:
array([[[0., 0.]],
       [[0., 0.]],
       [[0., 0.]]])
In [3]: a[0] = [[5, 6]]
In [4]: a
Out[4]:
array([[[5., 6.]],
       [[0., 0.]],
       [[0., 0.]]])
In [5]: a[0] = np.vstack((a[0], [[10, 15]]))
Out[5]:
ValueError: could not broadcast input array from shape (2,2) into shape(1,2)
In [6]: a[0] = np.append(a[0], [[10, 15]], axis=0)
Out[6]:
ValueError: could not broadcast input array from shape (2,2) into shape(1,2)

所需的输出将是。

array([[[5., 6.  ]
        [10., 15.]],
        [[0., 0.]],
        [[0., 0.]]])

任何帮助将不胜感激。

澄清:

我正在寻找的输出是这样的。

[[[ 5,  6],
  [10, 15]],
 [[ 0,  0]],
 [[ 0,  0]]]

凯尔·布斯(Kyle Booth)的回应接近:

c = np.insert(a, 1, b, axis=1)
[[[ 5,  6],
  [10, 15]],
 [[ 0,  0],
  [10, 15]],
 [[ 0,  0],
  [10, 15]]]
这不是

一个有效的numpy数组。

[[[ 5,  6],
  [10, 15]],
 [[ 0,  0]],
 [[ 0,  0]]]

它有 3 个"行",一个是 (2,2) 形状,其他是 (1,2)。

如果我将其键入为列表列表

In [40]: x = np.array([[[5,6],[10,15]],[[0,0]],[[0,0]]])
Out[40]: array([[[5, 6], [10, 15]], [[0, 0]], [[0, 0]]], dtype=object)

我得到了一个形状(3,),dtype object的数组,因为它无法创建正常的3d数组。 这 3 个对象中的每一个都只是列表的列表。 把它包裹在np.array并没有多大作用。

如果我列出 3 个 2d 数组,可能会更有意义:

In [45]: [np.array(y) for y in x]
Out[45]: 
[array([[ 5,  6],
       [10, 15]]), 
 array([[0, 0]]), 
 array([[0, 0]])
]
问题不在于

3D,而在于不规则的数组,不同大小的数组。

这是你想要的:

import numpy as np
a = np.array([[[5., 6.]],
       [[0., 0.]],
       [[0., 0.]]])
b = np.array([[10, 15]])
c = np.insert(a,1,b,0)
print c
[[[  5.   6.]]
 [[ 10.  15.]]
 [[  0.   0.]]
 [[  0.   0.]]]

最新更新