从三维数组中删除 NaN 行

dea*_*n44 6 python numpy

如何NaN使用索引从下面的数组中删除行(因为我需要从不同的数组中删除相同的行。

array([[[nan,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]],

       [[ 0.,  0.,  0.,  0.],
        [ 0., nan,  0.,  0.],
        [ 0.,  0.,  0.,  0.]]])
Run Code Online (Sandbox Code Playgroud)

我使用命令获取要删除的行的索引

a[np.isnan(a).any(axis=2)]
Run Code Online (Sandbox Code Playgroud)

但是使用我通常在 2D 数组上使用的方法不会产生所需的结果,从而丢失了数组结构。

a[~np.isnan(a).any(axis=2)]
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
Run Code Online (Sandbox Code Playgroud)

如何使用从我的第一个命令获得的索引删除我想要的行?

And*_*dyK 1

你需要重塑:

a[~np.isnan(a).any(axis=2)].reshape(a.shape[0], -1, a.shape[2])
Run Code Online (Sandbox Code Playgroud)

但请注意,每个 2D 子数组的 NaN 行数应该相同才能获得新的 3D 数组。