[英]filtering a 3D numpy array according to 2D numpy array
我有一個2D numpy數組形狀(3024,4032)。
我有一個3D numpy陣列的形狀(3024,4032,3)。
2D numpy數組填充0和1。
3D numpy數組填充0到255之間的值。
通過查看2D數組值,我想更改3D數組中的值。 如果2D數組中的值為0,我將沿着最后一個軸將3D數組中的所有3個像素值更改為0。 如果2D數組中的值為1,我將不會更改它。
我已經檢查了這個問題, 如何使用另一個數組的值過濾numpy數組 ,但它適用於2個具有相同維度的數組。 就我而言,尺寸是不同的。
如何在兩個數組中應用過濾,在兩個維度上具有相同的大小,但在最后一個維度上沒有大小?
好的,我會回答這個問題,以突出一個關於“缺失”維度的世俗性。 讓我們假設a.shape==(5,4,3)
和b.shape==(5,4)
索引時 ,現有維度保持對齊,這就是為什么@Divakar的解決方案a[b == 0] = 0
有效。
在廣播時 ,現有尺寸是正確對齊的,這就是為什么@InvaderZim的a*b
不起作用的原因。 你需要做的是a*b[..., None]
,它在右邊插入一個可廣播的維度
我覺得這個很簡單:
如果a是填充了值的3D數組(a.shape ==(5,4,3)),並且b是填充了1和0的2D數組(b.shape ==(5,4)),則重新形成b並乘以它們:
a = a * b.reshape(5, 4, 1)
Numpy會根據需要自動擴展陣列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.