讲解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 json encode datetime类型
Dec 28 Python
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
理解Python中的类与实例
Apr 27 Python
Python常用小技巧总结
Jun 01 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
python enumerate函数的使用方法总结
Nov 15 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
python3图片文件批量重命名处理
Oct 31 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
详解anaconda离线安装pytorchGPU版
Sep 08 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
通过对服务器端特性的配置加强php的安全
2006/10/09 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
php实现将Session写入数据库
2015/07/26 PHP
JavaScript基础知识之数据类型
2012/08/06 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
python 实现删除文件或文件夹实例详解
2016/12/04 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
Python 12306抢火车票脚本
2018/02/07 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
简述DNS进行域名解析的过程
2013/12/02 面试题
电脑教师的自我评价
2013/12/18 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
迎元旦广播稿
2014/02/22 职场文书
春风化雨观后感
2015/06/11 职场文书
2016公司年会主持词
2015/07/01 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android