讲解Python3中NumPy数组寻找特定元素下标的两种方法


Posted in Python onAugust 04, 2019

引子

Matlab中有一个函数叫做find,可以很方便地寻找数组内特定元素的下标,即:Find indices and values of nonzero elements。
这个函数非常有用。比如,我们想计算图1中点Q(x0, y0)抛物线的最短距离。一个可以实施的方法是:计算出抛物线上所有点到Q点的距离,找到最小值,用find函数找到最小值对应的下标,即M点横坐标和纵坐标对应的元素的下标,M点到Q点的距离就是最短距离。

讲解Python3中NumPy数组寻找特定元素下标的两种方法 

首先给出Matlab使用find函数实现的代码:

a = linspace(-5,5,1000);
b = a .^2;
x0 = 4;
y0 = 4;
dis = sqrt((a - x0).^2 + (b - y0).^2);
mm = find (dis == min(dis));
a0 = a(mm);
b0 = b(mm);
disMin = sqrt((a0 - x0).^2 + (b0 - y0).^2);
plot(a, b);
hold on;
scatter(x0, y0, 'k*');
scatter(a0, b0, 'k*');
xx = [a0, x0];
yy = [b0, y0];
plot(xx, yy);

讲解Python3中NumPy数组寻找特定元素下标的两种方法

NumPy中的where函数

Syntax: np.where(conditions, [x,y])

具体实现代码如下:

import numpy as np
import math
import matplotlib.pyplot as plt

a = np.linspace(-5, 5, 10000)
b = a * a
x0 = 4
y0 =4
num = np.linspace(0, len(a) - 1, len(a))
dis = np.linspace(0, 0, len(a))
for k in num:
  k = int(k)
  dis[k] = dis[k] + math.sqrt((a[k] -x0) **2 + (b[k] - y0) **2)
disMin = min(dis)
disMinIndex = np.where(dis == disMin)
disMin0 = math.sqrt((a[disMinIndex] - x0) **2 + (b[disMinIndex] - y0) **2)
print('The mininum distance:',disMin)
print('The mininum distance:',disMin0)
print(type(dis))
a0 = a[disMinIndex]
b0 = b[disMinIndex]
fig = plt.figure(figsize = (6,6), dpi = 200)
ax1 = plt.subplot(1,1,1)
line11 = ax1.scatter(a,b,s = 1)
line12 = ax1.scatter(x0, y0, s = 100, marker = '*', color = 'darkorange')
line13 = ax1.scatter(a0, b0, s = 100, marker = '*', color = 'darkorange')
line14 = ax1.plot([x0,a0],[y0,b0], color = 'darkorange')
line15 = ax1.text(4.2,4,'Q(x0,y0)')
line16 = ax1.text(0.6,5, 'M(a0,b0)')
line18 = plt.xlim(-5,5)
line17 = plt.ylim(0,25)
plt.savefig('C:/Users/BRIAR/Desktop/index.png')
plt.show()

The mininum distance: 1.943317035
The mininum distance: 1.9433170350024023
class ‘numpy.ndarray'

讲解Python3中NumPy数组寻找特定元素下标的两种方法

List中的index函数

Syntax: List.index(aimElement)
注意:此处需将NumPy数组转换成List格式的数据。
具体实现代码如下:

import numpy as np
import math
import matplotlib.pyplot as plt

a = np.linspace(-5, 5, 10000)
b = a * a
x0 = 4
y0 =4
num = np.linspace(0, len(a) - 1, len(a))
dis = np.linspace(0, 0, len(a))
for k in num:
  k = int(k)
  dis[k] = dis[k] + math.sqrt((a[k] -x0) **2 + (b[k] - y0) **2)
disMin = min(dis)
disList = dis.tolist()
disMinIndex = disList.index(disMin)
disMin0 = math.sqrt((a[disMinIndex] - x0) **2 + (b[disMinIndex] - y0) **2)
print('The mininum distance:',disMin)
print('The mininum distance:',disMin0)
print(type(disList))
a0 = a[disMinIndex]
b0 = b[disMinIndex]
fig = plt.figure(figsize = (6,6), dpi = 200)
ax1 = plt.subplot(1,1,1)
line11 = ax1.scatter(a,b,s = 1)
line12 = ax1.scatter(x0, y0, s = 100, marker = '*', color = 'darkorange')
line13 = ax1.scatter(a0, b0, s = 100, marker = '*', color = 'darkorange')
line14 = ax1.plot([x0,a0],[y0,b0], color = 'darkorange')
line15 = ax1.text(4.2,4,'Q(x0,y0)')
line16 = ax1.text(0.6,5, 'M(a0,b0)')
line18 = plt.xlim(-5,5)
line17 = plt.ylim(0,25)
plt.savefig('C:/Users/BRIAR/Desktop/index.png')
plt.show()

The mininum distance: 1.943317035
The mininum distance: 1.9433170350024023
class ‘list'

讲解Python3中NumPy数组寻找特定元素下标的两种方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用中文的方法
Feb 19 Python
Python 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
python从ftp下载数据保存实例
Nov 20 Python
python 定时修改数据库的示例代码
Apr 08 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
python3跳出一个循环的实例操作
Aug 18 Python
python 多线程死锁问题的解决方案
Aug 25 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 #Python
Python 实现遥感影像波段组合的示例代码
Aug 04 #Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 #Python
详解用python生成随机数的几种方法
Aug 04 #Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 #Python
python中pygame安装过程(超级详细)
Aug 04 #Python
浅谈python图片处理Image和skimage的区别
Aug 04 #Python
You might like
PHP对象实例化单例方法
2017/01/19 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
python实现动态创建类的方法分析
2019/06/25 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
python简单的三元一次方程求解实例
2020/04/02 Python
Python3开发环境搭建详细教程
2020/06/18 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
幼师专业毕业生自荐信
2013/09/29 职场文书
汽车专业毕业生推荐信
2013/11/12 职场文书
批评与自我批评材料
2014/02/15 职场文书
保险公司早会主持词
2014/03/22 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
人力资源管理专业毕业生自荐书
2014/05/25 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
教师节感谢信
2015/01/22 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript