遍历一维数组读取星点坐标出现索引越界错误如何解决
问题原因
- 循环对象设置错误:
star_coords是仅包含x、y两个数组的列表,len(star_coords)返回值为2,你原本要遍历的是4031个星点,循环范围完全不符合预期 - 变量被意外覆盖:第一次循环时你用
x = x[i]将原本存储所有星点x坐标的数组,替换成了单个坐标值,第二次循环时x已经是长度为1的标量/小数组,索引i=1自然越界 - 数组维度问题:
np.hsplit拆分出来的x、y默认是形状为(4031, 1)的二维列向量,直接按一维索引取值逻辑不匹配
修复方案
首先将拆分后的x、y数组压平为一维数组,然后遍历所有星点的索引,不要在循环内覆盖全局的x、y变量:
# Find centres of mass of each labeled objects xy = np.array(ndimage.center_of_mass(data, labeled, range(1, num_objects+1))) # Unpack star coordinates, split array into x and y components,直接压平为一维数组 x, y = np.hsplit(xy, 2) x = x.flatten() y = y.flatten() # 遍历所有星点的索引,总数量等于xy的行数 for i in range(xy.shape[0]): # Fit a PSF to each star,单独拿临时变量存当前星点的坐标,不要覆盖原x、y数组 current_x = x[i] current_y = y[i] x2, y2, amplitude, intensity, sigma_y_fitted, sigma_x_fitted = fitPSF(im_array, global_mean, current_x, current_y, config)
如果你不想额外压平数组,也可以直接取二维数组的第i行第0列:
# 不压平数组的取值写法 current_x = x[i, 0] current_y = y[i, 0]
内容的提问来源于stack exchange,提问作者Jimbles
相关产品推荐
相关产品推荐

