讲解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中列表(list)操作方法汇总
Aug 18 Python
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
python 解决cv2绘制中文乱码问题
Dec 23 Python
python实现最速下降法
Mar 24 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
Python中的socket网络模块介绍
Jul 23 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的正则处理函数总结分析
2008/06/20 PHP
初识PHP中的Swoole
2016/04/05 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
Django中modelform组件实例用法总结
2020/02/10 Python
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
汽车专业毕业生自荐信
2013/11/03 职场文书
医科大学生毕业的自我评价分享
2013/11/12 职场文书
建材业务员岗位职责
2013/12/08 职场文书
会计系中文个人求职信
2013/12/24 职场文书
父母寄语大全
2014/04/12 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
铅球加油稿100字
2014/09/26 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
施工安全责任协议书
2016/03/23 职场文书
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript