我需要计算一个numpy ndarray矩阵中非NaN元素的个数。在Python中如何高效地完成这个任务呢?下面是我实现这个任务的简单代码:
import numpy as np
def numberOfNonNans(data):
count = 0
for i in data:
if not np.isnan(i):
count += 1
return count
在numpy中是否有一个内置的函数?效率很重要,因为我在做大数据分析。
感谢任何帮助!
5条答案
按热度按时间nwwlzxa71#
~
会反转从np.isnan
传回的布林矩阵。np.count_nonzero
对非0\false的值进行计数。.sum
应给予相同的结果。但使用count_nonzero
可能更清楚测试速度:
data.size - np.count_nonzero(np.isnan(data))
在这里似乎勉强是最快的。其他数据可能会给予出不同的相对速度结果。deyfvvtc2#
快速写入替代方案
尽管不是最快的选择,但如果性能不是问题,您可以用途:
sum(~np.isnan(data))
.性能:
zfycwa2u3#
要确定数组是否稀疏,获取nan值的比例可能会有所帮助
如果该比例超过阈值,则使用稀疏数组,例如-https://sparse.pydata.org/en/latest/
ujv3wf0j4#
另一种方法是在索引上执行此操作,但速度稍慢。
np.isnan(data)
和==
运算符的双重使用可能有点矫枉过正,所以我发布答案只是为了完整性。eit6fx6z5#