我有一个二维的numpy数组,其中一些行可能包含nan值。根据以下规则,我想选择这些数组中行中nan值的出现或缺失情况:
- 如果一行不以nan值开头,则该数组的结果为-1。 - 如果一行以nan值开头,则结果将是从该行开头开始的连续的nan值序列中最后一个nan值的索引。
在我的实际工作中,我将处理包含数百万行的numpy数组。请问,有什么最优的方法可以实现这个功能吗?
以以下数组为例:
这里的预期结果将是
以下是我尝试过的成功代码。但是,我希望有一个更优化的解决方案。
- 如果一行不以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]