我试图找到一种有效的方法来删除包含重复元素的numpy数组行。例如,下面的数组:第一个月应仅保留[[1,2,3]]。我知道Pandas的申请可以工作排明智的,但这太慢了。什么是更快的替代方案?谢谢你,谢谢
[[1,2,3]]
vvppvyoh1#
使用pandas nunique(不快!):
nunique
out = a[pd.DataFrame(a).nunique(axis=1).eq(a.shape[1])]
字符串或者使用numpy的sort和diff来确保一行中的所有值都不同(如果列数合理,则非常有效):
sort
diff
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的数据
array([[1, 2, 3]])
inkz8wg92#
在没有Pandas的情况下,这样做的一种方式如下:
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]]
型
ukdjmx9f3#
要从numpy数组中排除重复行,请执行以下操作:
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]]
3条答案
按热度按时间vvppvyoh1#
使用pandas
nunique
(不快!):字符串
或者使用numpy的
sort
和diff
来确保一行中的所有值都不同(如果列数合理,则非常有效):型
或者使用广播(如果有很多列,内存会很昂贵):
型
输出:
array([[1, 2, 3]])
方法比较:
x1c 0d1x的数据
inkz8wg92#
在没有
Pandas
的情况下,这样做的一种方式如下:字符串
其输出:
型
ukdjmx9f3#
要从
numpy
数组中排除重复行,请执行以下操作:字符串
输出量:
型