【发布时间】:2021-05-15 11:03:13
【问题描述】:
我有一个 2D numpy 数组,其中散布着随机的 nan 值。我现在的目标是仅从该数组中获取沿维度 0 的最后一个 x 非 nan 元素。
import numpy as np
np.random.seed(0)
M, N, c = 10, 5, 15
A = np.random.randn(M,N)
A.ravel()[np.random.choice(A.size, c, replace=False)] = np.nan
A
[[ 1.76405235 nan 0.97873798 2.2408932 nan]
[-0.97727788 nan nan nan 0.4105985 ]
[ 0.14404357 1.45427351 nan 0.12167502 0.44386323]
[ 0.33367433 nan -0.20515826 0.3130677 -0.85409574]
[ nan 0.6536186 0.8644362 -0.74216502 2.26975462]
[ nan 0.04575852 nan 1.53277921 1.46935877]
[ 0.15494743 0.37816252 -0.88778575 nan -0.34791215]
[ 0.15634897 1.23029068 1.20237985 -0.38732682 nan]
[ nan -1.42001794 -1.70627019 nan -0.50965218]
[-0.4380743 -1.25279536 0.77749036 nan -0.21274028]]
所以在这个例子中,对于 x=3 最后我想要一个大小为 3x5 的数组,只包含最后 3 个非 nan 值。像这样:
[[ 0.15494743 1.23029068 1.20237985 -0.74216502 -0.34791215]
[ 0.15634897 -1.42001794 -1.70627019 1.53277921 -0.50965218]
[-0.4380743 -1.25279536 0.77749036 -0.38732682 -0.21274028]]
我知道我可以使用 idx = np.where(~np.isnan(A)) 来获取非 nan 值的索引,但我不确定如何从那里继续。
编辑:这可以使用for 循环轻松完成,但我理想情况下正在寻找矢量化解决方案。
【问题讨论】: