python - 在 numpy 数组中的特定位置插入值(np.insert 做对了吗?)

标签 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 的任务,只不过后者在指定索引处的之前插入值,而不是处> 指定的索引(只有当只有一个索引时两者才重合)。

所以我能想到的最好的办法是

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

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

最佳答案

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

offsets

np.insert 的文档将其描述为“在其之前插入值的一个或多个索引”,这只是近似正确的。偏移量可以等于 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 .

关于python - 在 numpy 数组中的特定位置插入值(np.insert 做对了吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442115/

相关文章:

python - 用三角方法计算傅里叶级数

python - 如何将数组连接成 3D 矩阵?

python - scipy.optimize.curve_fit : not a proper array of floats error/object too deep for desired array

Python/Matplotlib - 快速更新轴上的文本

python - Django:必须使用对象 pk 或 slug 调用通用详细 View

java - 从一维像素数组中获取特定像素

php - 将键值对添加到现有数组

java - 如何打印列而不是行?

python - 如何使用OpenCV在几乎圆形的孔中找到各种圆弧的不同中心?

python - 如何使用 BeautifulSoup 抓取分页表并将结果存储在 csv 中?