我有一個 numpy ndarray 變數:
>>> type(data)
<class 'numpy.ndarray'>
>> data.shape
(250, 250, 3)
它對應于包含黑色或白色像素的 250*250 影像。
我想將 r,g,b 資訊轉換為布林值(黑色或白色),從而獲得一個包含布林值或 0/1 值的 (250, 250) 陣列。
我沒有成功地系結了以下內容:
iswhite = lambda t: t[0] == 255
vfunc = np.vectorize(iswhite)
vfunc(data)
我相信我必須以某種方式使用該函式的引數signature,vectorize但盡管查看了 Numpy 檔案,但我無法弄清楚如何做到這一點。
有關資訊,我知道我可以通過其他方式實作我想要的:
np.alltrue(data == [255, 255, 255], axis = 2)
但在這里我想學習如何使用矢量化函式。
預先感謝您的幫助
uj5u.com熱心網友回復:
正如所評論的,您不應將其np.vectorize視為加速運行時的一種手段。根據檔案,它只是一個花哨的for回圈。
回到np.vectorize在這種情況下如何使用的問題,您需要傳遞signature以便vectorize知道它需要在陣列上作業:
iswhite = lambda t: (t == 255).all()
vfunc = np.vectorize(iswhite, signature='(n)->()')
vfunc(data).shape
# (250,250)
uj5u.com熱心網友回復:
您的 lambda 函式對于您要實作的目標是錯誤的(我什至不想討論它是否有意義)。你的 lambda 函式應該是這樣的:
iswhite = lambda t: 255
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/361978.html
上一篇:獲取除特定索引外的false掩碼
