遍历NumPy数组时元素值引发索引越界问题排查
问题分析与解决
错误根源
当你写for x in arr_orig时,x确实是数组里的元素值(也就是你生成的1-10随机数),但你在循环里错误地把x当成了数组的索引来使用——arr_orig[x]这行代码是在尝试用元素值x去访问数组的对应位置。
你的数组长度是10,NumPy数组的索引从0开始,有效索引范围是0到9。当元素值x等于10时,arr_orig[10]自然会触发索引越界错误,因为数组根本没有这个位置。
修正后的代码
你的需求是找出数组里的最小值,然后赋值给arr_copy[0]。正确的写法应该直接用遍历得到的元素值x来比较,而不是把它当索引:
import numpy as np arr_orig = np.zeros(10) arr_copy = np.copy(arr_orig) arr_orig = np.random.randint(1, 11, 10) lowest_val = arr_orig[0] # 直接用遍历到的元素值x和当前最小值比较 for x in arr_orig: if x < lowest_val: lowest_val = x arr_copy[0] = lowest_val print(arr_orig) print(arr_copy)
更高效的NumPy风格写法
既然用了NumPy,完全没必要用for循环手动找最小值,NumPy内置了专门的方法,代码更简洁,运行效率也更高:
import numpy as np arr_orig = np.random.randint(1, 11, 10) arr_copy = np.zeros_like(arr_orig) arr_copy[0] = np.min(arr_orig) print(arr_orig) print(arr_copy)
内容的提问来源于stack exchange,提问作者user2059972
相关产品推荐
相关产品推荐

