Python中使用for循环实现numpy数组相加报IndexError索引越界
问题描述
仅使用for循环实现两个numpy数组的逐元素相加操作时,代码运行抛出错误,无法得到预期计算结果。
原实现代码
# Adding two arrays using For loop from numpy import * arr1 = array([2, 6, 8, 9, 1]) arr2 = array([1, 2, 3, 4, 5]) arrSum = array([]) for i in range(5): arrSum[i] = arr1[i] + arr2[i] print(arrSum)
运行报错信息
Traceback (most recent call last): File "g:\Python\First Project\main.py", line 241, in <module> arrSum[i] = arr1[i] + arr2[i] IndexError: index 0 is out of bounds for axis 0 with size 0
错误原因
- numpy数组的长度在初始化时就已固定,不支持像Python原生列表那样对不存在的索引位置直接赋值。
- 原代码中
arrSum = array([])创建的是长度为0的空数组,没有索引为0的元素存储位,循环第一次执行赋值操作时就会触发索引越界错误。
正确实现方案
提供两种符合「仅用for循环逐元素计算」要求的实现方式,运行后均能得到正确的相加结果[ 3 8 11 13 6]:
方案1:预分配等长numpy数组
提前创建和输入数组长度一致的numpy数组,再通过循环逐位赋值:
from numpy import * arr1 = array([2, 6, 8, 9, 1]) arr2 = array([1, 2, 3, 4, 5]) # 预分配和输入数组等长的整型数组 arrSum = empty(len(arr1), dtype=int) # 用数组实际长度做循环边界,可适配不同长度的输入数组 for i in range(len(arr1)): arrSum[i] = arr1[i] + arr2[i] print(arrSum)
方案2:用列表暂存结果后转numpy数组
利用Python列表支持动态追加元素的特性,循环中先把计算结果存入列表,最后统一转为numpy数组:
from numpy import * arr1 = array([2, 6, 8, 9, 1]) arr2 = array([1, 2, 3, 4, 5]) sum_result = [] for i in range(len(arr1)): sum_result.append(arr1[i] + arr2[i]) arrSum = array(sum_result) print(arrSum)
内容的提问来源于stack exchange,提问作者user17260323
相关产品推荐
相关产品推荐

