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

遍历一维数组读取星点坐标出现索引越界错误如何解决

问题原因

  • 循环对象设置错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:27:02