【菜菜的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】 很高兴认识你!加入我们共同进步!

目录
相关文章
|
3月前
|
数据采集 数据处理 Python
探索数据科学前沿:Pandas与NumPy库的高级特性与应用实例
探索数据科学前沿:Pandas与NumPy库的高级特性与应用实例
50 0
|
4月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 4
矩阵是由行和列构成的矩形数组,其元素可以是数字、符号或数学表达式。
36 4
|
4月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 2
不同于ndarray,matlib函数生成的是矩阵形式。教程中详细解释了矩阵的概念,并介绍了转置矩阵的实现方式,使用T属性或函数实现。此外,还展示了如何利用`matlib.empty()`创建指定形状的新矩阵,并可选择数据类型及顺序。最后通过示例演示了矩阵填充随机数据的方法。
40 3
|
4月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
113 0
|
2月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
86 5
|
4月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 8
矩阵是由行和列构成的矩形数组,其元素可以是数字、符号或表达式。教程中讲解了如何使用`numpy.matlib.rand()`创建指定大小且元素随机填充的矩阵,并演示了矩阵与ndarray之间的转换方法。此外,还介绍了如何使用T属性进行矩阵转置。示例代码展示了创建矩阵、将其转换为ndarray以及再转回矩阵的过程。
50 9
|
4月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 8
NumPy提供了多种排序方法,包括快速排序、归并排序及堆排序,各有不同的速度、最坏情况性能、工作空间和稳定性特点。此外,NumPy还提供了`numpy.extract()`函数,可以根据特定条件从数组中抽取元素。例如,在一个3x3数组中,通过定义条件选择偶数元素,并使用该函数提取这些元素。示例输出为:[0., 2., 4., 6., 8.]。
33 8
|
4月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 2
介绍NumPy` 中的排序方法与条件筛选函数。通过对比快速排序、归并排序及堆排序的速度、最坏情况性能、工作空间需求和稳定性,帮助读者选择合适的排序算法。此外,还深入讲解了 `numpy.argsort()` 的使用方法,并通过具体实例展示了如何利用该函数获取数组值从小到大的索引值,并据此重构原数组,使得其变为有序状态。对于学习 `NumPy` 排序功能来说,本教程提供了清晰且实用的指导。
43 7
|
4月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 5
NumPy中的排序方法及特性对比,包括快速排序、归并排序与堆排序的速度、最坏情况性能、工作空间及稳定性分析。并通过`numpy.argmax()`与`numpy.argmin()`函数演示了如何获取数组中最大值和最小值的索引,涵盖不同轴方向的操作,并提供了具体实例与输出结果,便于理解与实践。
30 5
|
5月前
|
机器学习/深度学习 存储 算法
NumPy 与 SciPy:Python 科学计算库的比较
【8月更文挑战第30天】
213 5