详解numpy中的array(附实例源码)
Numpy定义
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用,这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
NumPy 主要应用包括:
机器学习模型:在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。
图像处理和计算机图形学:计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。
数学任务:NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。
为什么要用numpy
Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组(在TensorFlow里面偏向于矩阵理解),也没有各种运算函数。因而不适合数值运算。NumPy的出现弥补了这些不足。(——摘自张若愚的《Python科学计算》)
详情请参考:Overview — NumPy v1.21 Manual
NumPy安装
因为numpy通常跟 scipy matplotlib一起使用,所以一起安装三个模块即可。
pip3 install --user numpy scipy matplotlib
numpy array基础使用
import numpy as npa = np.array([1,2,3,4]),#1行4列矩阵,即一维数组b = np.arange(4) # 1行4列矩阵,元素递增1的一维数组c = np.array([[1,2],[3,4]]) # 2行2列矩阵,即二维数组d = np.arange(4).reshape((2,2)) #变换输出 2行2列print (a)print(type(a)) #输出a的类型print (b)print (c)print (d)
分别输出:
[1 2 3 4]
[0 1 2 3]
[[1 2]
[3 4]]
[[0 1]
[2 3]]
np数组的广播
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行。如果两个数组 a 和 b 形状相同,即满足a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
例如代码
a = np.array([1,2,3])b = np.array([10,20,30])c = a * bprint (c)
输出
[10 40 90]
数组广播相加操作
a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) #4x3 的二维数组b = np.array([1,2,3])print(a + b)
输出
[[11 12 13]
[2122 23]]
下面的图片展示了数组 b 如何通过广播来与数组 a 兼容。4x3 的二维数组与长为 3 的一维数组相加,等效于把数组 b 在二维上重复 4 次再运算:
np数组的切片和索引
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。ndarray数组可以基于0-n的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。相信大家理解python list切片相关操作,一定会对该部分的内容感到熟悉,这里举几个经典的例子:
基础实例
import numpy as npa = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]b = a[5] #下标5元素的值c = np.array([[1,2,3],[3,4,5],[6,7,8]])print(b)print(a[3:5]) #输出下标3-5的值,注意这里可以输出下限3,而不包括上限5print(c[0,0]) #输出第一行第一列的元素即[1,2,3]中的1print (c[...,1]) #第2列元素print (c[1,...]) # 第2行元素print (c[...,1:]) # 第2列及剩下的所有元素
输出
5
[3 4]
1
[2 4 7]
[3 4 5]
[[2 3]
[45]
[78]]
布尔索引实例
我们可以通过一个布尔数组来索引目标数组。布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
c = np.array([[1,2,3],[3,4,5],[6,7,8]])print (c[c > 3]) #打印出大于3的元素
输出
[4 5 6 7 8]
numpy array遍历
直接上代码,普通一维数组
arr = np.array([1, 2, 3])for x in arr:print(x)
输出
1
2
3
定义一个numpy的二维数组,二维以上的数组这里不做讨论
arr = np.array([[1, 2, 3], [4, 5, 6]])for x in arr:print(x)
输出
[1 2 3]
[4 5 6
如果想一个一个地输出每一个元素,可以这样编写代码
for x in arr:for y in x:print(y)
输出
1
2
3
4
5
6
上面的方式比较麻烦,我们可以通过方法np.nditer实现一个一个地输出每一个元素
for x in np.nditer(arr):print(x)
输出
1
2
3
4
5
6
numpy array元素过滤
实例,在np数组中,过滤大于2的元素
arr = np.array([1, 2, 3, 4])newarr = arr[arr >2]print(newarr)
输出
[3 4]
怎么样,是不是非常非常简单
numpy array 关于字符的处理
如果np数组中存储的是字符,如果相对字符元素进行相关操作,需要使用api —np.char
有这样一个需求,把字符'0.01%','1.1%','1.21%' 中的%去掉,并把字符转型为float类型。如何实现呢?代码如下:
b=np.array(['0.01%','1.1%','1.21%'])newb=np.char.rstrip(b,'%').astype(float)print(newb)
输出
[0.01 1.1 1.21]
其中:
rstrip表示删除某个字符
astype(float)表示把元素转型为float
详解numpy中的array(附实例源码)相关推荐
- Android中mesure过程详解 (结合Android 4.0.4 最新源码)
如何遍历并绘制View树?之前的文章Android中invalidate() 函数详解(结合Android 4.0.4 最新源码)中提到invalidate()最后会发起一个View树遍历的请求,并通 ...
- Android中layout过程详解 (结合Android 4.0.4 最新源码)
上一篇文章Android中mesure过程详解 (结合Android 4.0.4 最新源码)介绍了View树的measure过程,相对与measure过程,本文介绍的layout过程要简单多了,正如l ...
- 详解linux下auto工具制作Makefile源码包(制作篇)
2019独角兽企业重金招聘Python工程师标准>>> 详解linux下auto工具制作Makefile源码包(制作篇) 水木杨 一. 概述 为了更好的制作configure ...
- 【Android数据存储】ContentProvider详细介绍(附实例源码)
1.ContentProvider是什么? ContentProvider--内容提供者.它是一个类,这个类主要是对Android系统中进行共享的数据进行包装,并提供了一组统一的访问接口供其他程序调用 ...
- php simplexml_load_file 详解,php中simplexml_load_file函数用法实例讲解
php中simplexml_load_file函数用法实例讲解 发布于 2015-02-07 06:53:40 | 136 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文 ...
- 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程
本篇文章主要介绍了详解spring中使用Elasticsearch的代码实现,具有一定的参考价值,有兴趣的可以了解一下 在使用Elasticsearch之前,先给大家聊一点干货. 1. ES和solr ...
- html中超链接使用_HTML实例源码
HTML实例源码 实例一 1.要求: 知识要点: html 文档的基本结构,html 标签的书写格式.作用.用法 实训目的: 掌握 html 文档的基本结构,掌握 html 代码网页编辑的基本方法实训 ...
- python中的super用法详解_Python中super函数用法实例分析
本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...
- 详解numpy中argsort函数
当你不了解一个函数的时候,你可以采用两种方式:一种输入来了解函数 print(help(np.argsort)) 要么就是 直接 点进函数来看函数的源代码,可能源代码都是英文,不太好理解,没有关系,我 ...
最新文章
- 图像质量评估-NIMA
- Redis学习笔记--Redis数据过期策略详解
- php开发问题及解决方案,PHP开源开发框架ZendFramework使用中常见问题说明及解决方案...
- 函数计算FC让游戏群采集营销数据滴水不漏
- LIS(Longest Increasing Subsequence)最长上升(不下降)子序列
- javascript 中的location.pathname
- linux cvs账户,在linux下为cvs创建用户
- 【分段哈希】H. Paint the Wall
- python学习笔记2---内置函数
- 模糊规则优化matlab,遗传算法优化模糊pid控制规则
- Houdini VEX 制作楼梯
- html5桌面打开网页是有问号,点击HTML页面问号出现提示框
- Python高级-前端-01-HTML和CSS
- Elasticsearch:如何制作 GeoJSON 文件并进行地理位置搜索
- win10安装quicktime
- 部件mscomctl_mscomctl.ocx下载_mscomctl.ocx官方下载【32位64位】-太平洋下载中心
- 量化交易之数据获取篇
- 数仓 即席查询 之 Persto
- 如何提高CSDN博客排名
- [转]普通软件项目开发过程规范(五)—— 总结
热门文章
- 修改注册表实现改变CPU名称 <偷梁换柱>
- dijkstra的matlab程序,最短路径算法dijkstra的matlab程序,让大家来找茬,交流
- google三大论文
- tera-PROMISE数据集
- 继京东美团后,腾讯派发快手5116万股:价值26亿港元
- s7300的db块详细说明_如何使用S7-300的DB块
- 小型折弯机、芡实剥壳机、煤矿湿喷砂浆搅拌机、桃子去皮机、复摆颚式破碎机、牛头刨床、倒挡拨叉、倾斜式液压式升降平台、液压电梯、立体车库、零件数控编程、车刀刃磨机、变速箱、钢筋弯曲机、换刀机械手……的设计
- 河北师范大学汇华学院计算机类宿舍在哪,【学校介绍】河北师范大学汇华学院...
- mingw使用libev
- 音乐节为什么需要网络覆盖?如何搭建临时稳定WiFi?