python - 如何通过索引数组替换 NumPy 数组的某些元素
问题描述
我有一个 numpy 数组a
,我想替换一些元素。我有一个元组/numpy 数组中新元素的值,a
并且需要在另一个元组/numpy 数组中替换该元素的索引。下面是一个使用 python 做我想做的事的例子。如何在 NumPy 中有效地做到这一点?
示例脚本:
a = np.arange(10)
print( f'a = {a}' )
newvalues = (10, 20, 35)
indexes = (2, 4, 6)
for n,i in enumerate( indexes ):
a[i]=newvalues[n]
print( f'a = {a}' )
输出:
a = array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a = array([ 0, 1, 10, 3, 20, 5, 35, 7, 8, 9])
我试过a[indexes]=newvalues
但得到了IndexError: too many indices for array: array is 1-dimensional, but 3 were indexed
解决方案
指示要替换的元素的索引列表应该是 Python list
(或类似类型),而不是tuple
. 选择元组中的不同项表示它们应该从不同的轴维度中选择。
因此,a[(2, 4, 6)]
与 相同a[2, 4, 6]
,它被解释为第一维索引 2、第二维索引 4 和第三维索引 6 处的值。
以下代码正常工作:
indexes = [2, 4, 6]
a[indexes] = newvalues
另请参阅numpy 文档中的 Indexing 页面,特别是介绍中的第二个“Note”块以及Advanced Indexing下的第一个“Warning” :
在 Python 中,
x[(exp1, exp2, ..., expN)]
等价于x[exp1, exp2, ..., expN]
; 后者只是前者的语法糖。
高级索引的定义意味着它
x[(1,2,3),]
与x[(1,2,3)]
. 后者相当于x[1,2,3]
哪个将触发基本选择,而前者将触发高级索引。请务必了解为什么会发生这种情况。
推荐阅读
- python - 使用 sklearn 的逻辑回归中的自定义缩放功能
- anylogic - ANYLOGIC 抢占资源
- java - Firebase 使用对话框上传图像,但对话框未调用解除仍在 onSuccess 中工作
- python - 如何成功训练测试拆分以在 keras 训练模型
- python - Python:试图在找到元素之前找到它
- javascript - JavaScript:读取 excel 单元格值
- python - 如何让我的机器人在 discord.py 中删除/删除角色?
- c# - 为包含存储库和工作单元的域层创建测试
- elasticsearch - [...] 上超出了高磁盘水印 [90%],分片将从该节点移出
- javascript - Vue:为什么我的 html 表格列显示为单条直线?