簡體   English   中英

根據2D numpy數組過濾3D numpy數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM