讲解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使用reportlab画图示例(含中文汉字)
Dec 03 Python
wxPython学习之主框架实例
Sep 28 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
python实现二分查找算法
Sep 21 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 Python
Python编程编写完善的命令行工具
Sep 15 Python
Python编程源码报错解决方法总结经验分享
Oct 05 Python
Python if else条件语句形式详解
Mar 24 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学习之流程控制实现代码
2011/06/09 PHP
Destoon模板制作简明教程
2014/06/20 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
JSON格式化输出
2014/11/10 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
Vue渲染函数详解
2017/09/15 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
Node.js笔记之process模块解读
2018/05/31 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Python单例模式的两种实现方法
2017/08/14 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
python复合条件下的字典排序
2020/12/18 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
计算机毕业大学生推荐信
2013/12/01 职场文书
法律专业学生的自我评价
2014/02/07 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书