numpy直方图布尔索引与沿维度0的索引数组不匹配;维度为

2024-10-04 01:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过在每个图像中创建像素强度的直方图,然后将天空值设置为与最高频率的bin的强度相等,来减少天文图像。然后我们的想法是从每个像素中减去这个天空值帧索引器错误:布尔索引与沿维度0的索引数组不匹配;维度为3651469,但相应的布尔维度为3651468

#sciFlat is a list containing three images in array form.

sciFlat = np.asarray(sciFlat)
minpix = min(sciFlat.flatten())
maxpix = max(sciFlat.flatten())
rng = int(maxpix-minpix)
#These are histogram ranges, now loop through each image.
#Sky subtract science images.
sciSky = []
for i in range(3):
    hf = np.histogram(sciFlat[i].flatten(), bins=rng, range=(minpix,maxpix))
    skyval = hf[1][hf[0] == max(hf[0])]
    print(skyval)
    skySub = sciFlat[i] - skyval
    sciSky.append(skySub)

在 我希望代码能够成功地完成数字直方图应返回hist(大小为n的扁平数组)和bin_edges(长度为n的1D数组)。在

索引器错误回溯(最近一次调用)

^{pr2}$

索引器错误:布尔索引与沿维度0的索引数组不匹配;维度为3651469,但相应的布尔维度为3651468


Tags: 图像bin错误像素数组直方图天空images
1条回答
网友
1楼 · 发布于 2024-10-04 01:25:29

我相信只是你的逻辑在循环中失败了,写出了直方图输出:

for i in range(3):
    hist, edges = np.histogram(sciFlat[i].flatten(), bins=rng, range=(minpix,maxpix))
    skyval = edges[hist == max(hist)]
    print(skyval)
    skySub = sciFlat[i] - skyval
    sciSky.append(skySub)

直方图为您提供了值的边缘,您最需要的是边缘的中点:

^{pr2}$

通过设置中间值而不是边缘,直方图的维数相同。为了说明边缘和中间的区别:

^{3}$

星形表示最大的中点,如您所见,它位于边之间: enter image description here

相关问题 更多 >