如何在numpy数组中的元素之间插入零?

时间:2017-11-05 19:46:09

标签: python arrays numpy

我有一个nd数组,例如:

x = np.array([[1,2,3],[4,5,6]])

我想将最后一个维度的大小加倍,并在元素之间插入零以填充空间。结果应如下所示:

[[1,0,2,0,3,0],[4,0,5,0,6,0]]

我尝试使用expand_dimspad来解决问题。但是pad函数不仅在最后一个维度中的每个值之后插入零。结果的形状为(3, 4, 2),但应为(2,3,2)

y = np.expand_dims(x,-1)
z = np.pad(y, (0,1), 'constant', constant_values=0)
res = np.reshape(z,[-1,2*3]

我的代码结果:

array([[1, 0, 2, 0, 3, 0],
       [0, 0, 4, 0, 5, 0],
       [6, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0]])

pad如何在每个元素之后的最后一个维度中插入零?或者有更好的方法来解决问题吗?

3 个答案:

答案 0 :(得分:6)

只需初始化输出数组并使用slicing -

进行分配
m,n = x.shape
out = np.zeros((m,2*n),dtype=x.dtype)
out[:,::2] = x

另外还有堆叠 -

np.dstack((x,np.zeros_like(x))).reshape(x.shape[0],-1)

答案 1 :(得分:4)

您可以简单地使用insert函数来完成此操作:

np.insert(x, [1,2,3], 0, axis=1)

array([[1, 0, 2, 0, 3, 0],
       [4, 0, 5, 0, 6, 0]])

答案 2 :(得分:1)

与expand_dims一致,我们可以使用stack

In [742]: x=np.arange(1,7).reshape(2,-1)
In [743]: x
Out[743]: 
array([[1, 2, 3],
       [4, 5, 6]])
In [744]: np.stack([x,x*0],axis=-1).reshape(2,-1)
Out[744]: 
array([[1, 0, 2, 0, 3, 0],
       [4, 0, 5, 0, 6, 0]])

stack使用expend_dims添加维度;它与np.array类似,但可以更好地控制新轴的添加方式。因此,它是一种散布阵列的便捷方式。

堆栈产生一个(2,4,2)数组,我们重新形成(2,8)。

x*0可以替换为np.zeros_like(x),或任何创建相同大小的零数组的内容。

np.stack([x,x*0],axis=1).reshape(4,-1)添加0行。