【问题标题】:Removing NaN rows from a three dimensional array从三维数组中删除 NaN 行
【发布时间】:2019-02-25 02:05:23
【问题描述】:

如何使用索引从下面的数组中删除 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.]]])

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

a[np.isnan(a).any(axis=2)]

但是使用我通常在 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.]])

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

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    你需要重塑:

    a[~np.isnan(a).any(axis=2)].reshape(a.shape[0], -1, a.shape[2])
    

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

    【讨论】:

    • 不保证他们会
    • @dearn44 那么您无法获得 3D 数组。形状[1] 应该是固定的。
    • @dearn44 NumPy 本身不支持锯齿状数组。
    • 有道理,我会接受这个答案,因为它在逻辑约束下解决了相关问题
    猜你喜欢
    • 2015-06-08
    • 2017-05-25
    • 2020-04-21
    • 2012-07-22
    • 1970-01-01
    • 2023-03-31
    • 2018-12-21
    • 1970-01-01
    相关资源
    最近更新 更多