python - 与 nan 结成独特的情侣

标签 python numpy unique nan

想要我想要实现

我希望在包含 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.nanFalse ... :/

我想过使用 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/

相关文章:

c++ - c++中的叉积

python - 无法安装 prettytable

python - 基于所选参数的 Memoize 函数结果

python - 如何将一列中的所有列表编译成一个唯一列表

r - 如何删除所有重复项,以便 NONE 留在数据框中?

Python pickle : fix\r characters before loading

python - Pandas:根据另一个数据框中的值在数据框中添加新列

python - 如何使用 argmin 的输出作为 Numpy 的索引

java - 使用 nd4j 的 S 形导数

C++11 STL 独有的函数,但反过来