NumPy - 在指定的索引后插入一个零数组

6

我的代码是:

x=np.linspace(1,5,5)

a=np.insert(x,np.arange(1,5,1),np.zeros(3))

我需要的输出是:
[1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5]

我获得的错误信息是:
ValueError: 形状不匹配:形状为 (3,) 的值数组无法广播到形状为 (4,) 的索引结果。
当我执行以下操作时:
x=np.linspace(1,5,5)

a=np.insert(x,np.arange(1,5,1),0)

输出结果为:
array([1., 0., 2., 0., 3., 0., 4., 0., 5.])

我试图插入一个数组,但为什么它不起作用?

附注:我不能使用循环

2个回答

3

您可以使用np.repeat来输入重复的索引。对于一个一维数组,np.insertobj参数是指单个索引。

x = np.linspace(1, 5, 5)

a = np.insert(x, np.repeat(np.arange(1, 5, 1), 3), 0)

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

2

另一个选项:

np.hstack((x[:,None], np.zeros((5,3)))).flatten()[:-3]

给出:

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

也就是说,假设x是一个列向量,将一个5x3的零块堆叠到其右侧,然后展平。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接