我想把一个数组插入到另一个数组的某些特定位置。例如,假设你有
import numpy as np
pos = np.array([1, 3, 4])
arr = np.array([0, 1, 2, 3, 4, 5])
vals = np.array([-1,-1])
我想把vals
插入到arr
的pos
指定的位置,这样最后就有了result = [0,-1,-1,1,2, -1,-1, 3,-1,-1,4,5]
。
也就是说,对于pos
中的所有i
,[result[i], result[i+1]]
应该等于val
。
我尝试了以下循环:
for ii in pos:
arr = np.insert(arr, ii, vals)
但是它不起作用,因为arr
的大小在每次迭代时都在增加。
2条答案
按热度按时间baubqpgj1#
由于
vals
是固定的,因此可以解释大小的变化:或者:
输出量:
ux6nzvsh2#
将
pos
和vals
扩展到匹配长度:insert
每次被调用时都会创建一个新数组,其中包含来自arr
和vals
的所有附带副本。对于重复调用,您必须考虑arr
的增长。请注意,
insert
考虑了这种增长。如果我把扩展的pos
加上[0,1,2...],我可以索引结果中的插入:类似地,我可以创建一个
result=np.zeros(12)
,找出arr
元素所属的位置,并将vals
元素分配给剩余的插槽。索引数学需要一些照顾,但不是花哨或耗时。insert
主要是一个方便的函数,而不是一个特殊的编译函数。一种方法是为我们想要插入值的位置创建一个布尔掩码:
创建一个目标数组:
指定原始值和新值: