在numpy数组中插入值_at_特定位置(np.insert完成对吗?)

时间:2017-11-22 19:03:33

标签: python arrays numpy

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

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

numpy.array个指数,比如说

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

我想获取一个数组,该数组在idces的位置有一个给定的值,比如-1,其他元素在其余的位置分布。所以在上面的例子中我想获得

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

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

所以我能想到的最好的是

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

这比使用-np.ones创建数组,计算idces的索引然后使用np.put更好......但我想知道:有更清洁的方法吗?

1 个答案:

答案 0 :(得分:1)

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

offsets

np.insert的文档将其描述为"插入值之前的索引或#34;这几乎是正确的。即使len(arr)抛出越界错误,偏移也可以等于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)

Related issue on NumPy tracker