我有一个numpy数组ids = np.array([1,1,1,1,2,2,2,3,4,4])
和另一个长度相等的vals = np.array([1,2,3,4,5,6,7,8,9,10])
注意:ids
数组按升序排序
我想在每个新ID的开头之前插入4个零-即
new array = np.array([0,0,0,0,1,2,3,4,0,0,0,0,5,6,7,0,0,0,0,8,0,0,0,0,9,10])
只有这样,我才能通过迭代非常慢的数组来实现这一点-我不确定如何使用insert,pad或expand_dim ...
答案 0 :(得分:1)
由于您的ids
递增并且是连续的,所以这并不那么困难,但是计算偏移量会有些混乱。
n = 4
m = np.flatnonzero(np.append([False], ids[:-1] != ids[1:]))
shape = vals.shape[0] + (m.shape[0]+1) * n
out = np.zeros(shape)
d = np.append([0], m) + np.full(m.shape[0] + 1, n).cumsum()
df = np.append(np.diff(d).cumsum(), [out.shape[0]])
u = tuple([slice(i, j) for i, j in zip(d, df)])
out[np.r_[u]] = vals
array([ 0., 0., 0., 0., 1., 2., 3., 4., 0., 0., 0., 0., 5.,
6., 7., 0., 0., 0., 0., 8., 0., 0., 0., 0., 9., 10.])
答案 1 :(得分:0)
u可以使用np.zeros并将其附加到现有数组中,例如
newid=np.append(np.zeros((4,), dtype=int),ids)
祝你好运!