numpy库简单使用
numpy简介
NumPy(Numerical Python)是python语言的一个扩展程序库,支持大量维度数组与矩阵运算,此外,也针对数据运算提供大量的数学函数库。
NumPy是高性能科学计算和数据分析的基础
NumPy的主要功能:
ndarray,一个多维数组结构,高效且节省空间
无需循环对整组数据进行快速运算的数学函数
*读写磁盘数据的工具以及用于操作内存映射文件的工具
*线性代数、随机数生成和傅里叶变换功能
*用于集成C、C++等代码的工具
Numpy的安装
pip install numpy
ndarray-多维数组创建
ndarry是多维数组结构,与列表区别:
数组对象内的元素类型必须相同
数组大小不可修改
np.array()创建
import numpy as np
np.array()
# 创建一维数组
np.array([1,2,3,4,5])
# array([1, 2, 3, 4, 5])
# 创建二维数组
np.array([[1,2,3],[4,5,6]])
# array([[1, 2, 3],
[4, 5, 6]])
注意:
numpy默认ndarray的所有元素的类型是相同的
如果传进列表中包含不同的类型,会统一为一个类型,优先级:str>float>int
np.array([[1,2.2,3],[4,5,6]]) # 整数都会变成浮点数
# array([[1. , 2.2, 3. ],
[4. , 5. , 6. ]])
np的routines函数创建
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差数量数组
np.linspace(1,100,num=20) # 产生1-100之间数量20个的等差数组
np.arange([start, ]stop, [step, ]dtype=None) 等差步长数组
np.arange(0,100,step=2) # 产生0-100,步长为2的等差数组
random.randint(low,high=None,size=None,dtype="1")
np.random.randint(0,100,size=(4,5)) # size表示维度
# array([[83, 58, 4, 20, 35],
[13, 33, 30, 14, 79],
[86, 58, 33, 44, 63],
[43, 40, 55, 16, 13]])
# 固定随机数组的随机因子,每次产生固定不变数组
np.random.seed(10) # 随机因子/时间种子
np.random.randint(0,100,size=(4,5))
ndarray属性和方法
常用属性
T:数组的转置(对高维数组而言)
dtype:数组元素的数据类型
size:数组元素的个数
ndim:数组的维数
shape:数组的维度大小(以元组形式)
img_arr = plt.imread('./girl.jpg') # 打开一张图片,获取图片的矩阵数组
# 获取数组的维度
img_arr.ndim
# 3
# 获取数组的外形
img_arr.shape
# (676, 1202, 3)
# 获取数组的大小
img_arr.size
# 2437656
# 获取数组的数据类型
img_arr.dtype
# dtype('uint8')
常用方法
numpy.zeros(dim1,dim2) 创建dim1*dim2的零矩阵
numpy.arange
numpy.eye(n) /numpy.identity(n) 创建n*n单位矩阵
numpy.array([…data…], dtype=float64 )
array.astype(numpy.float64) 更换矩阵的数据形式
array.astype(float) 更换矩阵的数据形式
array * array 矩阵点乘
array[a:b] 切片
array.copy() 得到ndarray的副本,而不是视图
array [a] [b]=array [ a, b ] 两者等价
name=np.array(['bob','joe','will']) res=name==’bob’ res= array([ True, False, False], dtype=bool)
data[True,False,…..] 索引,只索取为True的部分,去掉False部分
通过布尔型索引选取数组中的数据,将总是创建数据的副本。
data[ [4,3,0,6] ] 索引,将第4,3,0,6行摘取出来,组成新数组
data[-1]=data[data.__len__()-1]
numpy.reshape(a,b) 将a*b的一维数组排列为a*b的形式
array([a,b,c,d],[d,e,f,g]) 返回一维数组,分别为[a,d],[b,e],[c,f],[d,g]
array[ [a,b,c,d] ][:,[e,f,g,h] ]=array[ numpy.ix_( [a,b,c,d],[e,f,g,h] ) ]
array.T array的转置
numpy.random.randn(a,b) 生成a*b的随机数组
numpy.dot(matrix_1,matrix_2) 矩阵乘法
array.transpose( (1,0,2,etc.) ) 对于高维数组,转置需要一个由轴编号组成的元组
ndarray索引和切片、变形
1、数组和标量之间的运算
a+1 a*3 1//a a**0.5
2、同样大小数组之间的运算
a+b a/b a**b
3、数组的索引:
一维数组:a[5]
多维数组:
列表式写法:a[2][3]
新式写法:a[2,3] (推荐)
数组的切片:
一维数组:a[5:8] a[4:] a[2:10] = 1
多维数组:a[1:2, 3:4] a[:,3:5] a[:,1]
4、强调:与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。 【解决方法:copy()】
索引
一维数组的索引和列表一致,多维同理
无法直接索引某一列
arr = np.random.randint(0,100,size=(5,7))
arr[1] # 获取索引为1的行
arr[[1,2]] # 获取索引1,2的行
arr[1,2] # 获取行索引为1,列索引为2的值
切片
一维数组的切片和列表相同,多维同理
# 获取二维数组前两行
arr[0:2] # 默认切片为行索引
# 获取二维数组前两行和前两列
arr[0:2,0:2]
数据反转
# 将数组的行反转
arr[::-1]
# 将数组的列反转
arr[:,::-1]
# 全部反转
arr[::-1,::-1]
变形
ndarray数组可以使用arr.reshape()函数,注意参数是一个tuple
多维数组和一维数组之间的转换
arr = np.random.randint(0,100,size=(4,6))
arr.shape
# 二维变一维
arr_1 = arr.reshape(24)
arr_2 = arr.reshape((1,24))
# 一维变多维
arr_3 = arr_1.reshape((3,8))
arr_4 = arr_1.reshape
arr_5 = arr_1.reshape((4,-1)) # -1表示自动计算
# 多维转多维
arr_6 = arr.reshape((3,8))
注意:
在变形的过程中,数组的维度乘积必须是一致的,如4*6 可以变形为2*12,也可以变为8*3,1*24
级联
np.concatenate()
对多个numpy数组进行横向或者纵向的拼接
1.一维、二维、多维数组的级联,实际操作中级联为二维数组
np.concatenate((arr,arr),axis=0) # axis代表轴向,0表示咧,1表示行
2.合并照片
# 利用我们刚才打开的照片数组
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1) # 水平拼接三个数组
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0) # 垂直拼接上面拼接的图片
plt.imshow(arr_9) # 最终展示为9宫格的图片
ndarray布尔类型索引
问题:给一个数组,选出数组中所有大于5的数。
答案:a[a>5] 原理: a>5会对a中的每一个元素进行判断,返回一个布尔数组 布尔型索引:将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组
问题2:给一个数组,选出数组中所有大于5的偶数。
问题3:给一个数组,选出数组中所有大于5的数和偶数。
答案: a[(a>5) & (a%20)] a[(a>5) | (a%20)]
import numpy as np
a = np.array([1,2,3,4,5,4,7,8,9,10])
a[a>5&(a%2==0)] # 注意加括号,不叫括号错误,如下
# array([ 1, 2, 3, 4, 5, 4, 7, 8, 9, 10])
a[(a>5)&(a%2==0)]
# array([ 8, 10])
ndarray聚合函数
numpy.sum():求和函数
numpy.max()/min():最大值/最小值
numpy.mean():平均值
cumsum:求前缀和
std:求标准差
var:求方差
argmin:求最小值索引
argmax:求最大值索引
arr.sum(axis=1) # 列向求和
arr.max(axis=1) # 列向最大值
arr.mean(axis=1) # 列向平均值
其他聚合函数
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
np.power 幂运算
ndarray排序
numpy.sort()和ndarray.sort()都可以排序,稍有区别
numpy.sort(arr,axis=0) # 返回一个新的排序好的对象,arr并没有改变
arr.sort(axis=0) # arr直接被改变了
numpy库简单使用的更多相关文章
- numpy 库简单使用
numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...
- numpy 库使用
numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...
- 简单记录numpy库的某些基本功能
这里介绍python的一个库,numpy库,这个库是机器学习,数据分析最经常用到的库之一,也是利用python做数据必须用到的一个库,入门机器学习学的第一个python库就是它了. 先对其导入到pyt ...
- numpy库:常用基本
numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...
- 初识NumPy库-基本操作
ndarray(N-dimensional array)对象是整个numpy库的基础. 它有以下特点: 同质:数组元素的类型和大小相同 定量:数组元素数量是确定的 一.创建简单的数组: np.arra ...
- Numpy库(个人学习笔记)
一样,咱的计算机还是得先拥有Python,并且安装了Numpy库.有疑问的话可以看这里呦~~~~ 下面开讲: NumPy的主要对象是齐次多维数组.它是一个元素表(通常是数字),并且都是相同类型,由正整 ...
- Numpy库的下载及安装(吐血总结)
Python很火,我也下了个来耍耍一阵子.可是渐渐地,我已经不满足于它的基本库了,我把目光转到了Numpy~~~~~ 然而想法总是比现实容易,因为我之前下的是Python3.3.x,所有没有自带pip ...
- Numpy库的学习(五)
今天继续学习一下Numpy库,废话不多说,整起走 先说下Numpy中,经常会犯错的地方,就是数据的复制 这个问题不仅仅是在numpy中有,其他地方也同样会出现 import numpy as np a ...
- Numpy库的学习(一)
今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库 Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直 ...
随机推荐
- Mac下的常用快捷键总结
由于在公司的时候是使用的Windows下进行开发工作,但是回家之后,有时候要使用自己的Mac进行开发等工作,那么流利的使用快捷键就变得尤其的重要. 1. 退出软件 cmd + q 2.将最前面的窗口最 ...
- php通过反射方法调用私有方法
PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 下面我们演示一下如何通过反射,来调用执行一个类中的私有方法: <?php //MyClass这个类中包 ...
- linux如何配置使用sendEmail发送邮件
sendEmail是一个轻量级.命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择.使用简单并且功能强大.这个被设计用在php.bash.perl和web ...
- caffe py3 docker
https://hub.docker.com/r/mapler/caffe-py3/ docker pull mapler/caffe-py3 docker run -it mapler/caff ...
- 生成树计数及应用 Matrix-Tree
例:给定一个图,图上每条边是红色或蓝色 求恰好有K条红边的生成树的个数,N<=50. Matrix-Tree定理 对于限制条件可以利用多项式,把红边边权设为X,蓝边边权设为1. 最后求行列式得到 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(4)|借用Borrowing]
[易学易懂系列|rustlang语言|零基础|快速入门|(4)] Borrowing 继续讲讲另一个重要的概念:借用(borrowing), 什么是借用? 我们先来看前一文章([易学易懂系列|rust ...
- java高并发实战Netty+协程(Fiber)|系列1(续)|事件驱动模式和零拷贝
上次讲到事件驱动模式,今天我们来好好分析下netty的事件模式的几个类型. 先从NIO讲起, JAVA NIO方面Selector给Reactor模式提供了基础,Netty结合Selector和Rea ...
- bootstrap-table(2)问题集
参考;https://www.cnblogs.com/landeanfen/p/4993979.html 1.分页参数sidePagination 如果是服务端分页,返回的结果必须包含total.ro ...
- 漫谈 MyCat 配置系统
上篇文章<MyCat 启蒙:分布式系统的数据库架构演变>中,我们通过一个项目从零到百万级访问的变化,展示了这个过程中的数据层架构变化.其中说到了数据层架构变化所带来的三个问题: 读写数据源 ...
- 一个IP,一个linux服务器,两个项目,两个域名;如何将两个域名配置到同一个IP的两个项目中。
一.现有资源: 1.阿里云centOS6.5服务器: 2.安装tomcat8.0+JDK: 3.两个不同maven项目的war包,项目名分别为cloud.am: 4.两个域名http://www.lu ...