讲解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下载Bing图片(代码)
Nov 07 Python
探究Python中isalnum()方法的使用
May 18 Python
python爬取亚马逊书籍信息代码分享
Dec 09 Python
Python文本特征抽取与向量化算法学习
Dec 22 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
Python实现名片管理系统
Feb 14 Python
Django choices下拉列表绑定实例
Mar 13 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
浅谈Python中的继承
Jun 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中的integer类型使用分析
2010/07/27 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
PHP session 会话处理函数
2016/06/06 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
javascript options属性集合操作代码
2009/12/28 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
Python3字符串学习教程
2015/08/20 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
PyQt5实现下载进度条效果
2018/04/19 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
使用pip安装python库的多种方式
2019/07/31 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
中科创达面试题
2016/12/28 面试题
怎样客观的做好自我评价
2013/12/28 职场文书
绩效考核实施方案
2014/03/18 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书