我知道这个问题已经回答。但是我不理解代码中的某些内容。我试图在一个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]
答案 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)