gpt4 book ai didi

python - Numpy 从 3d 数组中删除行和列

转载 作者:行者123 更新时间:2023-12-01 08:28:27 24 4
gpt4 key购买 nike

假设你有一个 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 数组,其中只有 1。

我可以对二维数组执行此操作

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,而不是创建新数组。

关于python - Numpy 从 3d 数组中删除行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54064812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com