[英]NumPy - Excluding all zero 2D arrays from a 3D array
我有多個 3D arrays 具有不同的形狀,但我假設我有一個名為A
的數組,形狀為(53, 768, 768)
作為示例。 它由 53 個 2D arrays 組成,其中一些可能是空圖像。 那些空圖像只有 0 像素值。
如果N
個切片的值全為 0,我想將A
切片為(53 - N, 768, 768)
3D 數組。 這可能與索引?
我試過這樣a[:, ~np.all(a == 0)]
,但它返回一個形狀為(53, 1, 768, 768)
的數組。
采用:
import numpy as np
A = np.array(A) # if A is not a NumPy array
result = A[np.sum(A, axis = (-1, -2)) != 0]
這樣就可以了。
假設您的數據是這樣的:
z = np.array([
[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]],
[[0, 0, 0], [0, 0, 0]],
[[1, 1, 1], [1, 1, 1]]
])
z
的形狀是(4, 2, 3)
。 因此,我們需要一個形狀為4
的向量,聚合其他維度。 為此,我們可以在大多數 Numpy 函數中使用axis=
參數:
mask = np.all(z != 0, axis=(1, 2))
a[mask]
在此示例中, mask
將為array([False, False, True, False])
。
軸編號為 0、1、2 等。因此我們使用 1 和 2 來表示第 2 軸和第 3 軸。
您也可以像其他答案一樣使用負數; 如果您編寫的axis=(-2, -1)
指的是最后一個軸和倒數第二個軸,即本例中的軸 1 和軸 2。
通常,使用axis=
指定要通過聚合折疊哪些軸。 axis=
中未指定的任何軸都不會聚合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.