我開始使用 numpy。我得到了切片符號和元素計算,但我無法理解:for i, (I,J) in enumerate(zip(data_list[0], data_list[1])): joint_hist[int(np.floor(I/self.bin_size))][int(np.floor(J/self.bin_size))] += 1變量:data_list包含兩個np.array().flatten()圖像(最終更多)joint_hist[] 是這兩個圖像的聯合直方圖,稍后顯示 plt.imshow()bin_size 是直方圖中的槽數我不明白為什么最終直方圖中的坐標是I,J. 因此,不僅僅是某個位置的值joint_hist[]是某些切片/元素計算的結果。我需要獲取該計算的結果并使用 THAT 作為joint_hist 中的索引...編輯:我確實實際上并沒有i在循環中使用- 它是以前迭代的剩余物,我只是沒有注意到我不再需要它了我確實希望保持對 bin 大小的控制以及如何完成此操作的詳細信息,因此并不特別希望使用 histogramm2D。我稍后將使用它進行進一步的圖像處理,因此我寧愿靈活地調整我的方法,而不是必須弄清楚是否/如何使用內置函數來做特定的事情。
2 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
您確實可以for使用一些 numpy 符號來修飾該循環。假設您實際上不需要i(因為它不在任何地方使用):
for I,J in (data_list.T // self.bin_size).astype(int):
joint_hist[I, J] += 1
解釋
data_list.T側翻data_list。的每一行都data_list.T將包含特定坐標處像素的數據。
data_list.T // self.bin_size將產生與 相同的結果np.floor(I/self.bin_size),只是它一次對所有像素進行操作,而不是一次操作一個。
.astype(int)與 做同樣的事情int(...),但再次對整個數組而不是單個元素進行操作。
當您使用循環遍歷二維數組時,一次for返回一行。因此,for I,J in arr語法將一次返回一對像素,就像您的zip語句最初所做的那樣。
選擇
你也可以只histogramdd用來計算joint_hist,代替你的for循環。對于您的應用程序,它看起來像:
import numpy as np
joint_hist,edges = np.histogramdd(data_list.T)
不過,這將與您在上面指定的垃圾箱不同(numpy 會自動確定它們)。
添加回答
舉報
0/150
提交
取消