【发布时间】:2017-11-06 13:40:18
【问题描述】:
我有一个 numpy 数组,其中某些行专门用“nan”填充,即:
print(ar2[1560])
[ nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan]
我需要的是从这个 numpy 数组中删除所有这些行,而不会弄乱我的元素的顺序,即保持排序。我尝试了以下方法:
ar3=ar2[:,~np.all(np.isnan(ar2))]
但这只会将我的“nan”替换为“False”。
我也尝试了以下方法:
ar3 = ar2[~np.isnan(ar2)]
但它会将我的 2d numpyarray 转换为 1d numpyarray。
我知道一个解决方案是将我的 numpy 数组转换为数据框,然后删除“nan”值,然后将其转换回 numpy 数组,但我想知道是否有更直接的方法,仅在 numpy 包中(除了制作一个巨大的“for”循环并迭代所有内容)。谢谢。
【问题讨论】:
-
这是否意味着您寻求
delete那些行?如果是,有一个numpy.delete函数可以与mask一起使用。 -
你的阵列不是一维的吗?看起来确实是这样,因为
ar3 = ar2[~np.isnan(ar2)]正在做正确的事情