如果Numpy中存在重复值,则删除行

brgchamk  于 2023-08-05  发布在  其他
关注(0)|答案(3)|浏览(65)

我试图找到一种有效的方法来删除包含重复元素的numpy数组行。例如,下面的数组:
第一个月
应仅保留[[1,2,3]]
我知道Pandas的申请可以工作排明智的,但这太慢了。什么是更快的替代方案?
谢谢你,谢谢

vvppvyoh

vvppvyoh1#

使用pandas nunique(不快!):

out = a[pd.DataFrame(a).nunique(axis=1).eq(a.shape[1])]

字符串
或者使用numpy的sortdiff来确保一行中的所有值都不同(如果列数合理,则非常有效):

out = a[(np.diff(np.sort(a, axis=1))!=0).all(axis=1)]


或者使用广播(如果有很多列,内存会很昂贵):

out = a[(a[:,:,None] == a[:,None]).sum(axis=(1,2))==a.shape[1]]


输出:array([[1, 2, 3]])
方法比较:
x1c 0d1x的数据

inkz8wg9

inkz8wg92#

在没有Pandas的情况下,这样做的一种方式如下:

a = np.array([[1,2,3], [1,2,2], [2,2,2]])

mask = np.array([len(set(row)) == len(row) for row in a])
result = a[mask]

字符串
其输出:

print(result)

[[1 2 3]]

ukdjmx9f

ukdjmx9f3#

要从numpy数组中排除重复行,请执行以下操作:

# let's assume this is your sample array

import numpy as np

# Input array
arr = np.array([[1, 2, 3], [1, 2, 2], [2, 2, 2]])
# find unique rows from the above numpy array

unique_rows = np.array([row for row in arr if len(set(row)) == len(row)])

字符串
输出量:

[[1 2 3]]

相关问题