如何使用变量修改Python中的NumPy二维数组?
NumPy数组索引错误的解决方案
问题情况
用Python处理二维NumPy数组时,试图通过变量b和c修改指定位置的值,执行a[b,c] = 1.0时报错:
IndexError: only integers, slices (
:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices
补充信息:
b是函数计算得到的整数,c来自手动输入的数组d- 数组
adtype为float,是Google Colab中用于TensorFlow训练的全0数组,需要将特定位置设为1 - 相关代码:
a = np.zeroes((6,144), dtype=float) d = np.array([ [25,55,28,63,30,71,39,27,34,45,5,31], [20,17,35,12,44,41,15,70,69,64,16,8], [60,43,62,49,9,14,62,49,18,29,51,59]], dtype=float ) n = 0 m = 0 while n < 3: while m < 12: c = d[n,m] a[b,c] = 1.0 m += 1 n += 1
错误出在a[b,c] = 1.0这一行。
问题原因
- 索引类型不匹配:数组
d的dtype是float,即使数值是整数,取出的c也是浮点型。NumPy要求索引必须是整数、切片等类型,浮点型索引不被允许。 - 循环逻辑错误:内层循环的
m初始值放在外层循环外,第一次循环后m会变成12,后续外层循环迭代时,内层循环直接跳过,无法执行。 - 数组创建拼写错误:
np.zeroes是错误写法,正确应为np.zeros,这会导致数组a创建失败。
解决方法
方法一:修正索引类型+循环逻辑
import numpy as np a = np.zeros((6,144), dtype=float) d = np.array([ [25,55,28,63,30,71,39,27,34,45,5,31], [20,17,35,12,44,41,15,70,69,64,16,8], [60,43,62,49,9,14,62,49,18,29,51,59]], dtype=float ) # 假设b是已计算好的整数,示例设为0 b = 0 n = 0 while n < 3: m = 0 # 每次外层循环重置m while m < 12: c = d[n,m] # 将浮点型c转为整数类型 a[b, int(c)] = 1.0 m += 1 n += 1
方法二:直接指定数组d为整数类型
创建d时设置dtype=int,取出的c直接是整数,无需额外转换:
import numpy as np a = np.zeros((6,144), dtype=float) d = np.array([ [25,55,28,63,30,71,39,27,34,45,5,31], [20,17,35,12,44,41,15,70,69,64,16,8], [60,43,62,49,9,14,62,49,18,29,51,59]], dtype=int # 改为整数类型 ) b = 0 n = 0 while n < 3: m = 0 while m < 12: c = d[n,m] a[b,c] = 1.0 m += 1 n += 1
内容的提问来源于stack exchange,提问作者Teagan
相关产品推荐
相关产品推荐

