簡體   English   中英

Numpy 從 3d 數組中刪除行和列

[英]Numpy Remove Rows and Columns from 3d Array

假設你有一個 5x5x5 的 numpy 數組

    a = np.ones((5,5,5))
    a[:,3,:] = 0
    a[:,:,3] = 0

(我知道這很丑)

這返回

    [[[1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [0. 0. 0. 0. 0.]
  [1. 1. 1. 0. 1.]]

 [[1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [0. 0. 0. 0. 0.]
  [1. 1. 1. 0. 1.]]

 [[1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [0. 0. 0. 0. 0.]
  [1. 1. 1. 0. 1.]]

 [[1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [0. 0. 0. 0. 0.]
  [1. 1. 1. 0. 1.]]

 [[1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [1. 1. 1. 0. 1.]
  [0. 0. 0. 0. 0.]
  [1. 1. 1. 0. 1.]]]

我想要做的是刪除所有軸上只有 0 的所有行和列,返回一個新的 4x4x4 數組,其中只有 1s。

我可以為二維數組執行此操作

a = np.delete(a,np.where(~a.any(axis=0))[0], axis=1)
a = a[~np.all(a == 0, axis=1)]

但無法弄清楚如何用 3 個維度來做到這一點

任何人都知道如何做到這一點?

您可以為第二個和第三個軸分別找到所有零項的行的索引,然后使用np.delete刪除它們:

In [25]: mask = (a == 0)

In [26]: sec = np.where(mask.all(1))[1]

In [27]: third = np.where(mask.all(2))[1]

In [28]: new = np.delete(np.delete(a, sec[1], 1), third, 2)

請注意,如果您打算這樣做,您可以將結果重新分配給a ,而不是創建新數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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