You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用变量修改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
  • 数组a dtype为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这一行。

问题原因

  1. 索引类型不匹配:数组d的dtype是float,即使数值是整数,取出的c也是浮点型。NumPy要求索引必须是整数、切片等类型,浮点型索引不被允许。
  2. 循环逻辑错误:内层循环的m初始值放在外层循环外,第一次循环后m会变成12,后续外层循环迭代时,内层循环直接跳过,无法执行。
  3. 数组创建拼写错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:15:35