如何将值赋给Numpy数组中由另一数组指定的索引?
解决NumPy数组指定索引位置赋值问题
首先先明确你的数组定义,确保a是NumPy数组(不是普通列表),b是3×3的全零数组:
import numpy as np a = np.array([1, 4, 6]) b = np.zeros((3, 3), dtype=int) # dtype可根据需求调整,比如float v = 5 # 示例赋值的目标值
方法一:用flat属性直接操作一维索引
NumPy数组的flat属性可以把多维数组展平成一维的可索引对象,直接用a里的索引值赋值最简洁:
b.flat[a] = v
执行后b的结果:
[[0 5 0] [0 5 0] [5 0 0]]
方法二:拆分二维坐标赋值
如果需要明确操作二维的行和列,可以把一维索引转换成行、列坐标:
- 行索引 = 一维索引 ÷ 列数(这里是3,整数除法)
- 列索引 = 一维索引 % 列数
代码实现:
rows = a // 3 cols = a % 3 b[rows, cols] = v
效果和方法一完全一致。
你原来代码的问题
range(a)完全错误:range()只接受整数参数,不能传入数组或列表;- 哪怕遍历
a的元素,直接b[x] = v会把整行赋值为v,因为b是二维数组,b[x]取的是第x行,而不是单个元素。
内容的提问来源于stack exchange,提问作者Dave Twickenham
相关产品推荐
相关产品推荐

