想要我想要实现
我希望在包含 nan 的二维 numpy 数组中获得唯一的行。
更一般地说,我想根据 n-d numpy.ndarray
中的轴获取唯一值。
一个可重现的例子
import numpy as np
example = np.array([[0, np.nan],
[np.nan, 1],
[0, np.nan],
[np.nan, np.nan],
[np.nan, 1],
[np.nan, np.nan]])
我希望它的结果是什么:
array([[ 0., nan],
[nan, 1.],
[nan, nan]])
我尝试过的
我试过使用 np.unique
但它不起作用:
np.unique(example, axis=0)
结果是:
array([[ 0., nan],
[ 0., nan],
[nan, 1.],
[nan, 1.],
[nan, nan],
[nan, nan]])
所以我发现 np.nan == np.nan
是 False
... :/
我想过使用 np.allclose
作为 equal_nan
选项。但是重新实现 unique 效率不高
注意:我想大规模使用它。所以它应该很快。
有函数吗?我必须编码吗?任何建议都会有所帮助。
最佳答案
您可以为此使用 pandas.DataFrame
。 Pandas 建立在 numpy 二维数组之上,如果您获得 DataFrame 的 values
属性,您将获得裸数组。
要仅保留唯一行,请使用 drop_duplicates
:
import pandas as pd
pd.DataFrame(example).drop_duplicates().values
# Out:
array([[ 0., nan],
[nan, 1.],
[nan, nan]])
关于python - 与 nan 结成独特的情侣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51876541/