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