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作为过滤。

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

相关推荐

Spring Controller统计数据库的百万行数据(Aggregate Millions of Database Rows in a Spring Controller)

了解如何使用Spring和Speedment在Java中执行超快速聚合,即使是具有数百万行的大型数据集。只要API与数据库的结构相匹配,Spring Framework就可以使用JPA和Spring Web快速地建立关系型数据库的RESTful API。 然而,在许多API中,REST端不对应于特定的表,而是对应于一些聚合的字段。在这些情况下,你仍然需要编写

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

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

使用ANDROID_ID唯一标识Android设备

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

MyBatis执行MySql批量插入数据

MySQL批量插入数据语法为:insert into my_table(field1, field2, field3) values ("f1_vaule1","f2_vaule1","f3_vaule1"), ("f1_vaule2","f2_vaule2","f3_vaule2"), ("f1_vaule3","f2_vaule3","f3_vaule3

JavaScript删除数组里重复的元素

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

bash shell把每行行首的数字移动到行末

可以使用sed和GNU的gawk来实现。示例:123adfdfdsf 234dferere 345rererer 移动后结果为:adfdfdsf123 dferere234 rererer345 sed方法:sed -E 's/^([0-9]+)(.*)/\2\1/' source.txt > target.txt gawk方法:gawk&n

grep显示匹配以及前后的行

如果要指定匹配前后显示的行数,可以使用-B num指定匹配行前几行,以及使用-A num指定匹配行后几行,如:grep -B 3 -A 2 test demo.txt 如果前后行数一样,可以使用-C num指定前后显示的行数:grep -C 3 test demo.tx

Pandas统计dataframe列中为NaN的行数

这分为两种情况:缺少值NaN和字符串NaN。缺少值NaNdf = pd.DataFrame({'value':[np.nan, np.nan, 1, 5, 7]})print (df) value0 NaN1 NaN2 1.03 5.04 7.0count = df['value'].isna().sum()#或者 count = df['valu

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会动态变化,如果直接在迭代

转换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

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

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

pandas给DataFrame一行一行添加数据

使用pandas的DataFrame有个 简单的功能,先定义pandas的DataFrame,然后按行给DataFrame添加数据。方法一:使用df.loc方法>>> import pandas as pd>>> from numpy.random import randint>>> df = pd.DataFrame(columns=['li