讲解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 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
Python实现的一个简单LRU cache
Sep 26 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 Python
python中assert用法实例分析
Apr 30 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
Python常见异常分类与处理方法
Jun 04 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
Python编程中类与类的关系详解
Aug 08 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
Python netmiko模块的使用
Feb 14 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
PHP 身份证号验证函数
2009/05/07 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
在校学生职业规划范文
2014/01/08 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书