如何利用索引列表设置NumPy多维ndarray对应位置的元素值?
解决NumPy多维数组通过索引列表设置元素的问题
嘿,我懂你这会儿的困惑!你手里有个对应各轴的索引列表,想实现和直接写A[1, 0] = 1完全一样的效果对吧?其实有两种简单的方法能搞定:
方法一:把索引列表转成元组(最稳妥通用)
NumPy的多维索引本质上是接受元组作为索引参数的,而你手里的列表没法直接被识别成多维索引,所以只需要把列表转成元组就行:
import numpy as np A = np.zeros((2, 2)) idxs = [1, 0] # 把列表转成元组,直接代入索引 A[tuple(idxs)] = 1 print(A)
运行后你会得到想要的结果:
array([[0., 0.], [1., 0.]])
方法二:用解包运算符*(Python 3.5+适用)
如果你用的是Python 3.5及以上版本,还可以直接用*把列表里的元素展开成多个索引参数,效果和直接写A[1,0]完全一致:
import numpy as np A = np.zeros((2, 2)) idxs = [1, 0] # 解包列表元素作为索引 A[*idxs] = 1 print(A)
这个代码的输出和上面完全一样。
为啥直接用A[idxs]不行?
这里顺便给你解释下坑点:如果你直接写A[idxs],NumPy会把这个列表当成是对第一个轴的索引,也就是会取出A[1]和A[0]这两行,得到的是一个切片数组,而不是你要的单个元素,自然赋值结果就不对啦。所以必须把索引转换成NumPy能识别的多维索引格式才行。
内容的提问来源于stack exchange,提问作者user3447843
相关产品推荐
相关产品推荐

