numpy数组去掉重复的行,保留唯一的行数据

有以下numpy.array数据:

>>> original_array # 
array([[1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 0, 0],
[1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 1, 0]])

期待去掉重复的行结果为:

>>> unique_rows # 
array([[1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 0, 0],
[1, 1, 1, 1, 1, 0]])

解决方法

NumPy 1.13 可以使用unique,只需选择axis,即可在任何N维数组中选择唯一值。

去掉重复,保留唯一行

unique_rows = np.unique(original_array, axis=0)

需要注意的是,它会把重复的行留下其中一行,并不会删除所有重复的行。

删除所有重复的行:

使用reture_counts

arr, uniq_cnt = np.unique(original_array, axis=0, return_counts=True)
original_array= arr[uniq_cnt==1]

使用uniq_cnt为1作为过滤。

版权声明:著作权归作者所有。

相关推荐

Linux使用awk去掉重复值的几种情况

awk去掉重复的模式如下:!a[$0]++其中$0表示整行,$1表示第一列,$2表示第二列...文件如下:[root@localhost cc]# cat 1.txtadc 1 2a d aa 3 adfa d ba 3 adf1、去重第一列重复的行[root@localhost cc]# cat test.txt |awk '!a[$1]++{print}'adc 1 2a d a取重复的行第一

转换Pandas dataframe为numpy array数组

常用用于转换Pandas dataframe为numpy array有两种方法:np_array = df.as_matrix(columns=None)np_array = df.values但这两种方法都有一个缺陷:丢失dtype和name。另外一种可选的方法是使用df.to_records(),它会返回recarray,然后使用np.asarray()把转recarray转换为array。r

Python移除列表里重复的数据,并保留原来的次序

这有好几种方法实现。使用set实现def unique_everseen(items): seen = set() seen_add = seen.add return [x for x in items if not (x in seen or seen_add(x))]函数里把seen.add赋值给seen_add本地变量是出于性能考虑,因为seen会动态变化,如果直接在迭代

JavaScript删除数组里重复的元素

JavaScript里有多种方法可以用来对数组元素去重。ES6 SetES6提供了一个Set对象,用它可以很简单便可以对数组元素去重。function uniq(arr) {    return Array.from(new Set(arr)); } filter另外也可以通过filter来对数组元素去重。functi

使用ANDROID_ID唯一标识Android设备

使用Settings.Secure#ANDROID_ID 会返回每个用户唯一的64位hex字符串,它是在设备首次boot时生成。我们可以使用它来唯一标识Android设备。import android.provider.Settings.Secure; private String android_id = Secure.getString(ge

MySQL删除重复的行,保留其中一行

示例有这样一个表CREATE TABLE `tests` (  `id` int(11) DEFAULT NULL,  `name` varchar(20) DEFAULT NULL ) ; 现在需要删除重复name的行,但保留其中一行。方法一:保留id小的一行DELETE n1