簡體   English   中英

NumPy - 從 3D 數組中排除全零二維 arrays

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

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