我是python和numpy的新手。我有一个像这样的numpy数组:
a = [[ 0. 2. 0. 0. 0. 0. ]
[ 0. 14. 0. 0. 0. 0. ]]
对于第一个数组,其中2是,我想插入1 0 0,对于第二个数组14,我想插入0 0 1,以便最终结果如下所示: / p>
a = [[ 0. 1. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 1. 0. 0. 0. 0. ]]
最简单的方法是什么?
答案 0 :(得分:1)
所需数组的形状与原始数组a
不同。
因此,您无法使用简单切片生成所需的数组
分配,或单个调用分配函数,如numpy.place
,numpy.put
,numpy.putmask
或numpy.copyto
。
因此,我认为不是将此视为分配和插入操作 将它视为新阵列的构造可能更好。 有很多方法可以做到这一点:
您可以使用numpy.concatenate
:
np.concatenate([a[:,:1], b, a[:,2:]], axis=1)
np.column_stack([a[:,:1], b, a[:,2:]])
或numpy.c_
:
np.c_[a[:,:1], b, a[:,2:]]
np.array(np.bmat([a[:,:1], b, a[:,2:]]))
或为空数组分配空间,并将值分配给c
:
c = np.empty((a.shape[0], a.shape[1]+b.shape[1]-1), dtype=a.dtype)
c[:, :1] = a[:, :1]
c[:, 1:4] = b
c[:, 4:] = a[:, 2:]
这里没有必要,但要记住,分配和分配是构建数组的可行方法。有时,虽然不在这里,但它甚至是您最快的选择。
np.insert(np.delete(a, [1], 1), [1], b, axis=1)
但我建议您不要使用insert
和delete
。 np.delete
创建了一个新数组
从a
复制的值。相反,切片a[:,:1]
和
a[:,2:]
是<{1}}的观看次数,因此不需要任何复制。额外的
分配和复制使此方法比显示的其他方法慢
上方。
例如,如果我们定义:
a
然后
import numpy as np
a = np.array([[ 0., 2., 0., 0., 0., 0.],
[ 0., 14., 0., 0., 0., 0.]])
b = np.array([(1, 0, 0),
(0, 0, 1)])
(其他选项产生相同的结果。)