我有一个二维numpy数组,其中某些行可能有nans。我想根据以下规定选择这些数组的行中是否存在nans:
- 如果一行不是以nan开头,那么该数组的结果将是-1。
- 如果一行以nan开头,那么结果将是从该行开头开始的连续不间断的nan序列中最后一个nan的索引。
- 什么是最佳的方法?**在我的实际工作中,我将处理具有数百万行的numpy数组。
例如,让我们考虑下面的数组:
import numpy as np
arr = np.array([[1,11,np.nan,111,1111],
[np.nan, np.nan, np.nan, 2, 22],
[np.nan, np.nan, 3, 33, np.nan],
[4, np.nan, np.nan, 44, 444],
[np.nan, 5, 55, np.nan, 555],
[np.nan, np.nan, np.nan, np.nan, np.nan]])
字符串
这里的预期结果是result = [-1, 2, 1, -1, 0, 4]
。
下面是一个成功的代码,我已经尝试.但是,我想一个更优化的解决方案.
result = []
for i in range(arr.shape[0]):
if np.isnan(arr[i])[0] == False:
result += [-1]
elif np.all(np.isnan(arr[i])):
result += [arr.shape[1]-1]
else:
result += [np.where(np.isnan(arr[i]) == False)[0][0] - 1]
型
1条答案
按热度按时间tpxzln5u1#
您可以使用
hstack
添加一列non-nan,使用isnan
检查哪些值是nan,并使用argmin
获取第一个non-nan的位置:字符串
或者不使用连接,使用
where
来修复all
值为nan的情况:型
输出量:
型