亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用 Numpy 表示法替換 enumerate(zip(...))

用 Numpy 表示法替換 enumerate(zip(...))

神不在的星期二 2021-08-14 15:56:22
我開始使用 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 會自動確定它們)。


查看完整回答
反對 回復 2021-08-14
  • 2 回答
  • 0 關注
  • 231 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號