在numpy数组中插入零

时间:2018-12-20 02:37:18

标签: python numpy

一个接受 vector 并返回一个新矢量的函数,其中每个元素由4个连续的零分隔。

示例:

[4, 2, 1] --> [4,0,0,0,0,2,0,0,0,0,1]

5 个答案:

答案 0 :(得分:3)

设置

a = np.array([4, 2, 1])

使用切片分配:

s = a.shape[0]
v = s + (4 * (s - 1))
f = np.zeros(v)

f[::5] = a

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

答案 1 :(得分:2)

您可以使用以下方法实现它!

import numpy as np

a = [4, 2, 1] 

new_a = np.zeros((len(a)-1)*5+1)

new_a [np.arange(0,len(a)*5,5)] = a

print(new_a)

输出:

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

答案 2 :(得分:1)

将数组转换为列,在右侧添加零块,展平,并在末尾修剪多余的零点

np.concatenate([arr.reshape((-1, 1)), 
                np.zeros((arr.size, 4))], axis=1)\
  .reshape(-1)[:-arr.size-1]
array([4., 0., 0., 0., 0., 2., 0., 0., 0., 0., 1.])

答案 3 :(得分:1)

您可以使用insert()repeat()来获得类似的信息:

>>> a = np.array([4, 2, 1])
>>> np.insert(a, np.repeat([1, 2], 4), 0)
array([4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1])

答案 4 :(得分:1)

def insert_zeros_n(arr, n=4):
    ind = np.repeat([i+1 for i in range(len(arr)-1)], n) # where to insert zeros
    return np.insert(arr, ind, 0) # insert zeros

我认为此功能可以解决您的问题。