numpy ndarray 按条件筛选数组,关联筛选

转:http://http://blog.csdn.net/blackyuanc 作者:y小川 https://blog.csdn.net/blackyuanc/article/details/77948703

最近的项目中大量涉及数据的预处理工作,对于ndarray的使用非常频繁。其中ndarray如何进行数值筛选,总结了几种方法。

1.按某些固定值筛选 
如下面这段代码从,ndarray中可以筛选出数值等于3的子数组和其在原数组中的索引位置。

import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 12, 12, 3, 546, 1, 2])
print(np.where(arr==3))
print(arr[np.where(arr == 3)])

Output:

(array([ 5,  9, 14], dtype=int32),)
[3 3 3]

2.按多个固定值筛选 
按上述方法筛选多个固定值也是可行的,将不同条件用括号括起来,之间打 | 即可。

import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 12, 12, 3, 546, 1, 2])
print(np.where((arr == 3) | (arr == 1)))
print(arr[np.where((arr == 3) | (arr == 1))])

Output:

(array([ 0,  1,  2,  5,  9, 14, 16], dtype=int32),)
[1 1 1 3 3 3 1]

3.按范围筛选 
除了按固定值,我们还可以按一定的范围进行筛选

import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 12, 12, 3, 546, 1, 2])
print(np.where(arr > 3))
print(arr[np.where(arr > 3)])

Output:

(array([ 3,  4,  6,  7,  8, 10, 11, 12, 13, 15], dtype=int32),)
[  134    45    46    45    65 23424   234    12    12   546]

如果不需要index,还可以有更快的方法

import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 12, 12, 3, 546, 1, 2])
print(arr[arr > 3])

Output:

[  134    45    46    45    65 23424   234    12    12   546]

那为什么还需要用np.where呢?因为索引可以满足不同数组间的筛选,比如有a, b 两个数组我们需要筛选出所有a == 0的b时即可使用np.where函数。

import numpy as np

a = np.array([0, 0, 1, 1, 0, 1, 1, 0, 1])
b = np.arange(len(a))
print(a)
print(b)
print(b[np.where(a == 0)])

Output:

[0 0 1 1 0 1 1 0 1]
[0 1 2 3 4 5 6 7 8]
[0 1 4 7]

原文地址:https://www.cnblogs.com/xn5991/p/9526267.html

时间: 2024-08-29 23:00:58

numpy ndarray 按条件筛选数组,关联筛选的相关文章

np.newaxis 为 numpy.ndarray(多维数组)增加一个轴

>> type(np.newaxis) NoneType np.newaxis 在使用和功能上等价于 None,其实就是 None 的一个别名. 1. np.newaxis 的实用 >> x = np.arange(3) >> x array([0, 1, 2]) >> x.shape (3,) >> x[:, np.newaxis] array([[0], [1], [2]]) >> x[:, None] array([[0], [

numpy ndarray 交换多维数组(矩阵)的行/列

>> import numpy as np >> P = np.eye(3) >> P array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) 1 2 3 4 5 6 交换第 0 行和第 2 行: >> P[[0, 2], :] = P[[2, 0], :] # P[(0, 2), :] = P[(2, 0), :] >> P array([[ 0., 0., 1.], [ 0., 1., 0.]

<class 'numpy.ndarray'>的学习

在学习opencv-python的时候,给出图片地址再调用cv2.imread("地址"),发现出创建的是numpy类型的ndarray对象,用来存放多维数组的对象 # 导入cv2模块 import cv2 # 给出本地图片的地址 img_dir="D:/360Downloads/test.jpg" # 创建numpy类型的ndarray对象,存放多维数组的对象 img=cv2.imread(img_dir) # <class 'numpy.ndarray'&

NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构

本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存对齐.Numpy内存结构 一.多维数组的存取 多维数组的存取和一维数组类似,因为多维数组有多个轴,因此它的下标需要用多个值来表示,NumPy采用组元(tuple)作为数组的下标.如二维数组需要(x, y)的元组标记一个数组元素:三维数组需要(x, y, z)的元组标记一个元素. 如下图所示,a为一个6x6的二

筛选数组内的重复项

//给数组添加方法del(),作用是筛选数组内的重复项 Array.prototype.del = function() { var a = {}, c = [], length = this.length; for (var i = 0; i < length; i++) { var b = this[i]; var d = (typeof b) + b; if (a[d] === undefined) { c.push(b); a[d] = 1; } } return c; }

bobo jquery筛选数组之grep、each、inArray、map的用法及遍历json对象 [转]

纯粹记录下几种用法: jquery grep()筛选遍历数组 $().ready( function(){ var array = [1,2,3,4,5,6,7,8,9]; var filterarray = $.grep(array,function(value){ return value > 5;//筛选出大于5的 }); for(var i=0;i<filterarray.length;i++){ alert(filterarray[i]); } for (key in filtera

Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解

一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ var array = [1,2,3,4,5,6,7,8,9]; var filterarray = $.grep(array,function(value){ return value > 5;//筛选出大于5的 }); for(var i=0;i<filterarray.length;i++){ alert(filterarray[i]); } for (key in f

sql连接查询中on筛选与where筛选的区别

sql连接查询中on筛选与where筛选的区别 sql查询这个东西, 要说它简单, 可以很简单, 通常情况下只需使用增删查改配合编程语言的逻辑表达能力,就能实现所有功能. 但是增删查改并不能代表sql语句的所有, 完整的sql功能会另人望而生畏. 就拿比普通增删查改稍微复杂一个层次的连接查询来说, 盲目使用, 也会出现意料之外的危险结果,导致程序出现莫名其妙的BUG. 在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了,  在我们编写查询的时候, 筛选条件的放置不管是在o

Sql_连接查询中on筛选与where筛选的区别

sql中的连接查询分为3种, cross join,inner join,和outer join ,  在 cross join和inner join中,筛选条件放在on后面还是where后面是没区别的,极端一点,在编写这两种连接查询的时候,只用on不使用where也没有什么问题.因此,on筛选和where筛选的差别只是针对outer join,也就是平时最常使用的left join和right join. 来看一个示例,有两张数据表,结构和数据如图所示 表main 表ext 可以把这两张表看作