2017-12-02 2 views
1

私はスカイ値を各画像のピクセル強度のヒストグラムを作成し、次に最も高い頻度のビンの強度に等しく設定することによって天文画像を減算しようとしています。次に、そのフレーム内の各ピクセルから空の値を減算することです.IndexError:ブールインデックスが、次元0に沿ったインデックス付き配列と一致しませんでした。寸法が3651469であるが、ブール寸法を対応する3651468numpyヒストグラムbooleanインデックスが次元0に沿ってインデックス付き配列と一致しませんでした。次元は

#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) 

ある私はnumpy.histogramはHIST(サイズnの平坦化配列)とbin_edges(長さnの1次元配列)を返すべきであるように、コードが正常に完了することを期待します。

はIndexErrorトレースバック(最新の呼び出しの最後)

142  hf = np.histogram(sciFlat[i].flatten(), bins=rng, range=(minpix,maxpix)) 
143---> **skyval = hf[1][hf[0] == max(hf[0])]** <---- 
144  print(skyval) 
145  skySub = sciFlat[i] - skyval 

はIndexError:ブールインデックスは次元0に沿ってインデックス付きの配列と一致しませんでした。次元は3651469ですが、ブールの寸法を対応する3651468

+0

'hf.shape'は何ですか? –

答えて

1

である私は、ヒストグラムの出力を書き出し、それは単にループで失敗したあなたのロジックであると考えている:

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) 

ヒストグラムはほとんど何、値のエッジを提供しますエッジの中間点である可能性があります。

for i in range(3): 
    hist, edges = np.histogram(sciFlat[i].flatten(), bins=rng, range=(minpix,maxpix)) 
    mids = edges[:-1] + np.diff(edges)/2 
    skyval = mids[hist.argmax()] 
    print(skyval) 
    skySub = sciFlat[i] - skyval 
    sciSky.append(skySub) 

エッジの代わりにミッドを設定すると、ヒストグラムのサイズが同じになります。エッジと中域の違いを説明するために:

sciFlat = np.random.uniform(0,15,100) 
hist, edges = np.histogram(sciFlat, bins=(sciFlat.max()-sciFlat.min()).astype(int), range=(sciFlat.min(), sciFlat.max())) 
mids = edges[:-1] + np.diff(edges)/2 

hist.size 
Out[33]: 14 

edges.size 
Out[34]: 15 

mids.size 
Out[35]: 14 

plt.hist(sciFlat, bins=(sciFlat.max()-sciFlat.min()).astype(int), range=(sciFlat.min(), sciFlat.max())) 
plt.plot(mids[hist.argmax()], hist.max(), marker='*', ms=20, c='C3', zorder=1) 
plt.plot(mids, hist, 'o', zorder=2, c='C1') 

スターは、あなたが見るように、それはエッジ間で、最大の中間点を表し: enter image description here

関連する問題