【菜菜的CV进阶之路-基础库的使用-Numpy】按指定条件筛选numpy ndarray数据并进行操作

简介: 【菜菜的CV进阶之路-基础库的使用-Numpy】按指定条件筛选numpy ndarray数据并进行操作

问题:如何按照指定条件去对numpy ndarray 的部分值作修改?

1、面对这个问题首先想到的是去挨个遍历数组中的每个元素:

比如对于一个二维数组

1. shape = arr.shape
2. result = np.zeros(shape)
3. for x in range(0, shape[0]):
4.     for y in range(0, shape[1]):
5.         if arr[x, y] >= T:
6.             result[x, y] = 255

但这种方式显然无法有效的对更高维度的数组操作,而且速度很慢。如果数据维度不是很重要的话,比如只需要统计出数组中大于0的值的个数,此时可以使用ndarray.flatten函数将多维数组折叠成一维数组再做操作....

 

2、python的优点就是它的库函数丰富,numpy 提供的numpy.where()函数就可以很好地解决这一问题:

numpy.where() 有两种用法:

(1)np.where(condition, x, y)---满足条件(condition),输出x,不满足输出y。

如果是一维数组,相当于

[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
1. >>> aa = np.arange(10)
2. #函数说明:arange([start,] stop[, step,], dtype=None)根据start与stop指定的范围以及step设定的步
3. #长,生成一个 ndarray。比如np.arange(3)>>>array([0, 1, 2])
4. >>> np.where(aa,1,-1)
5. array([-1,  1,  1,  1,  1,  1,  1,  1,  1,  1])  # 0为False,所以第一个输出-1
6. >>> np.where(aa > 5,1,-1)
7. array([-1, -1, -1, -1, -1, -1,  1,  1,  1,  1])
8. 
9. >>> np.where([[True,False], [True,True]],    # 官网上的例子
10.              [[1,2], [3,4]],
11.              [[9,8], [7,6]])
12. array([[1, 8],
13.        [3, 4]])

(2) np.where(condition)

只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

1. >>> a = np.array([2,4,6,8,10])
2. >>> np.where(a > 5)             # 返回索引
3. (array([2, 3, 4]),)   
4. >>> a[np.where(a > 5)]              # 等价于 a[a>5]
5. array([ 6,  8, 10])
6. 
7. >>> np.where([[0, 1], [1, 0]])
8. (array([0, 1]), array([1, 0]))
9. #[[0,1],[1,0]]的真值为两个1,各自的第一维坐标为[0,1],第二维坐标为[1,0]

 

3、使用numpy内置索引,十分方便,而且因为numpy在算法上内部做了优化,速度也不差

ndarray:arr,则可以使用:arr[arr > 255] = x----将所有元素>255替换为值x

补充:numpy的内置索引机制:NumPy之四:高级索引和索引技巧

文章知识点与官方知识档案匹配,可进一步学习相关知识

Python入门技能树科学计算基础软件包NumPyNumPy概述220433 人正在系统学习中


AIEarth是一个由众多领域内专家博主共同打造的学术平台,旨在建设一个拥抱智慧未来的学术殿堂!【平台地址:https://devpress.csdn.net/aiearth】 很高兴认识你!加入我们共同进步!

目录
相关文章
|
29天前
|
机器学习/深度学习 存储 算法
Python中的NumPy库:数值计算与科学计算的基石
【2月更文挑战第29天】NumPy是Python科学计算的核心库,专注于高效处理大型多维数组和矩阵。其核心是ndarray对象,提供快速数组操作和数学运算,支持线性代数、随机数生成等功能。NumPy广泛应用于数据处理、科学计算和机器学习,简化了矩阵运算、统计分析和算法实现,是数据科学和AI领域的重要工具。
|
1月前
|
数据采集 机器学习/深度学习 存储
【机器学习】数据清洗——基于Numpy库的方法删除重复点
【机器学习】数据清洗——基于Numpy库的方法删除重复点
71 1
|
1月前
|
数据采集 机器学习/深度学习 数据可视化
深入学习NumPy库在数据分析中的应用场景
深入学习NumPy库在数据分析中的应用场景
|
1月前
|
存储 索引 Python
请解释Python中的NumPy库以及它的主要用途。
【2月更文挑战第27天】【2月更文挑战第97篇】请解释Python中的NumPy库以及它的主要用途。
|
4月前
|
BI 索引 Python
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
57 0
|
4月前
|
BI C语言 索引
Python科学计算库Numpy数值运算基础详解(超详细 附源码)
Python科学计算库Numpy数值运算基础详解(超详细 附源码)
58 0
|
4月前
|
存储 数据采集 数据挖掘
开源的Python科学计算库:NumPy
开源的Python科学计算库:NumPy
325 1
开源的Python科学计算库:NumPy
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch基础之张量模块数据类型、基本操作、与Numpy数组的操作详解(附源码 简单全面)
PyTorch基础之张量模块数据类型、基本操作、与Numpy数组的操作详解(附源码 简单全面)
36 0
|
1月前
|
Python
Numpy(Numerical Python)是一个用于处理大型多维数组和矩阵的Python库
【2月更文挑战第28天】Numpy(Numerical Python)是一个用于处理大型多维数组和矩阵的Python库
21 1
|
2月前
|
数据库 索引 Python
python数据库-NumPy与Matplotlib库
python数据库-NumPy与Matplotlib库