在我的Python应用程序中,我有一个3D矩阵(数组),如下所示:
array([[[ 1., 2., 3.]], [[ 4., 5., 6.]], [[ 7., 8., 9.]]])
我希望在特定的"行"中添加,例如,在中间的零数组中。最后,我想以下面的矩阵结束:
array([[[ 1., 2., 3.]],
[[ 4., 5., 6.]],
[[ 0., 0., 0.]],
[[ 0., 0., 0.]],
[[ 7., 8., 9.]]])
有谁知道如何解决这个问题?我尝试使用" numpy.concatenate",但它只允许我添加更多"行"。
提前致谢!
答案 0 :(得分:2)
可能重复
Inserting a row at a specific location in a 2d array in numpy?
例如:
a = array([[[ 1., 2., 3.]], [[ 4., 5., 6.]], [[ 7., 8., 9.]]])
output = np.insert(a, 2, np.array([0,0,0]), 0)
输出:
array([[[ 1., 2., 3.]],
[[ 4., 5., 6.]],
[[ 0., 0., 0.]],
[[ 7., 8., 9.]]])
为什么这适用于3D阵列?
请参阅文档here。 它说:
numpy.insert(arr, obj, values, axis=None)
...
Parameters :
values : array_like
Values to insert into arr.
If the type of values is different from that of arr,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
values is converted to the type of arr. values should be shaped so that
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arr[...,obj,...] = values is legal.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
所以这是非常明智的功能!!
答案 1 :(得分:1)
这是你想要的吗?
result = np.r_[ a[:2], np.zeros(1,2,3), a[2][None] ]
答案 2 :(得分:1)
我这样做:
>>> a = np.array([[[ 1., 2., 3.]], [[ 4., 5., 6.]], [[ 7., 8., 9.]]])
>>> np.concatenate((a[:2], np.tile(np.zeros_like(a[0]), (2,1,1)), a[2:]))
array([[[ 1., 2., 3.]],
[[ 4., 5., 6.]],
[[ 0., 0., 0.]],
[[ 0., 0., 0.]],
[[ 7., 8., 9.]]])
给(2,1,1)
的{{1}}中的2是0"行"插入。切片索引中的2当然是插入的位置。
如果您要插入大量的零,那么首先创建一个大的零数组然后从原始数组中复制所需的部分可能会更有效。