numpy使用0.1步长循环时存储结果到矩阵出现IndexError报错
问题原因
numpy数组仅支持整数、切片、布尔数组等类型作为索引。步长为1时,循环变量v、w的值均为整数,和res矩阵的索引值刚好重合,因此可以正常赋值。步长改为0.1后,循环变量为浮点数,不符合索引类型要求,因此触发IndexError。
解决方法
推荐使用enumerate同时遍历参数序列的索引和对应数值,用整数索引对res矩阵赋值:
import numpy as np # 预先定义参数序列 v_list = np.arange(0,5,0.1) w_list = np.arange(0,5,0.1) # 初始化res矩阵,大小和参数序列长度匹配 res = np.zeros((len(v_list), len(w_list)), dtype=int) # 遍历索引和对应参数值 for i, v in enumerate(v_list): for j, w in enumerate(w_list): C1 = v C2 = w # 原有计算逻辑,得到变量x # ... if x < 0: res[i,j]=1 else: res[i,j]=0
如果后续需要根据v、w的实际数值查询对应结果,可以通过参数序列匹配索引:
# 示例:查询v=1.5、w=2.0对应的结果 target_v = 1.5 target_w = 2.0 i = np.argmin(np.abs(v_list - target_v)) j = np.argmin(np.abs(w_list - target_w)) print(res[i,j])
内容的提问来源于stack exchange,提问作者Suttungr
相关产品推荐
相关产品推荐

