在numpy数组中查找唯一的行

时间:2019-07-19 20:25:49

标签: python-3.x numpy

我知道这个问题已经回答。但是我不理解代码中的某些内容。我试图在一个numpy数组中找到唯一的行。使用结构化数组的解决方案如下:

x是您的输入数组。

‍‍‍‍‍‍y = np.ascontiguousarray(x).view(np.dtype((np.void, x.dtype.itemsize * x.shape[1])))
_, idx = np.unique(y, return_index=True)
unique_result = x[idx]

我的问题是,为什么我们需要这一行:

y = np.ascontiguousarray(x).view(np.dtype((np.void, x.dtype.itemsize * x.shape[1])))

为什么我们不能只使用:

_, idx = np.unique(x, return_index=True)
unique_result = x[idx]

1 个答案:

答案 0 :(得分:0)

您在问几个问题。我不确定您在哪里找到提到的解决方案,但是我将解释为什么这样做。这个:

_, idx = np.unique(x, return_index=True)
unique_result = x[idx]

无法在np.array中查找唯一的行,因为如果没有给出轴,np.unique将使给定的数组变平。然后,我想象添加了y = np.ascontiguousarray(x).view(np.dtype((np.void, x.dtype.itemsize * x.shape[1])))行,这样,即使将它们展平,它们试图比较的内部数组也将各自表示为单独的项目(void类型)。然后,使用np.unique确实会返回唯一行。

但是,我看不出为什么有任何必要。您可以在传递感兴趣的轴时直接使用unique

unique_result = np.unique(x, axis=0)
相关问题