Python 在numpy数组中的特定位置插入值(np.insert done right?)

Python 在numpy数组中的特定位置插入值(np.insert done right?),python,arrays,numpy,Python,Arrays,Numpy,假设我有一个numpy.array值,比如 values=np.array([0,3,2,4,6]) 和索引的numpy.array,比如 idces=np.array([1,3,5]) 我想得到一个数组,它在idce的位置上有一个给定的值,比如说-1,其他元素分布在其余位置上。因此,在上述情况下,我想获得 np.array([0,-1,3,-1,2,-1,4,6]) 这看起来像是np.insert的任务,不同的是后者在指定索引的值之前插入值,而不是在指定索引的值之前插入值(只有当只有一个索引时

假设我有一个
numpy.array
值,比如

values=np.array([0,3,2,4,6])

和索引的
numpy.array
,比如

idces=np.array([1,3,5])

我想得到一个数组,它在idce的位置上有一个给定的值,比如说
-1
,其他元素分布在其余位置上。因此,在上述情况下,我想获得

np.array([0,-1,3,-1,2,-1,4,6])

这看起来像是
np.insert
的任务,不同的是后者在指定索引的值之前插入值,而不是在指定索引的值之前插入值(只有当只有一个索引时,这两个值才会重合)

所以我能想出的最好办法就是

np.insert(value,idces-np.arange(len(idces)),-1)


这仍然比使用
-np.ones
创建一个数组、计算
idce
的索引然后使用
np.put
要好。。。但是我想知道:有没有更干净的方法呢?

插入最好用偏移量来考虑,偏移量不是枚举数组元素,而是它们之间(或之前/之后)的间隙:

的文档将其描述为“插入值之前的一个或多个索引”,这只是大致正确的。即使
arr[len(arr)]
抛出越界错误,偏移量也可以等于
len(arr)
(数组末尾)

例如,
np.insert([3,1,4,1,5],[1,3,3,5],[0,0,0,0])
的意思是:在编号为1的间隙处放一个零,在编号为3的间隙处放两个,最后一个放在末尾。结果是
[3,0,1,4,0,0,1,5,0]

与指定新元素的插入后索引相比,此枚举具有以下优点:

1) 在一个位置插入一组元素更容易:
np.insert(arr,[3]*values.size,values)
在第三个偏移处插入数组
values

2) 使用
np.insert(arr、np.arange(values.size)、values)将两个数组交错起来更容易

3) 更容易控制插入点是否有效;有效性并不取决于插入了多少元素

当您知道插入后索引
idces
时,这种情况很容易处理,就像您使用

np.insert(values, idces - np.arange(len(idces)), -1)

.

如果您正在寻找内置的,我看不到任何或更紧凑的方式。使用
array initialization
可能是一种方法(为了提高性能),但这不是一种简单的方法。您使用
insert
的目的完全正确,而且不会造成混乱。在插入后索引方面,为
insert
使用另一个NumPy方法会让人困惑,所以没有一个方法也就不足为奇了。@6'whitemale好的,有道理。。。尽管如此,我还是很想知道是否有任何合理的理由表明,
insert
在默认情况下不会这样做。在我看来,它更有用,也更容易描述。