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同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直 ...
随机推荐
- 为了实现动态加载而编写的自己的ClassLoader
Copy备用 之前客户要求在不重启应用的前提下实现动态增加服务及交易,在网上查了很长时间也没发现类似的技术,最后研究了一下ClassLoader.因为项目是与Spring,一开始我和同事尝试替换源码的 ...
- TanksWar(坦克大战三维、二维版以及90版)
本文已迁移至:https://coco56.blog.csdn.net/article/details/103198945
- Linux学习之CentOS(二十六)--Linux磁盘管理:LVM逻辑卷的创建及使用
在上一篇随笔里面 Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理,详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理, ...
- CentOS 7.4 下安装部署Nagios监控系统详细攻略(三)
Nagios是一个流行的电脑系统和网络监控程序,它检测主机和服务,当异常发生和解除时能提醒用户.它是基于GPLv2开发的开源软件,可免费获得及使用. nagios工作原理 nagios的功能是监控服务 ...
- 公司内网机器vm ubuntu proxy 设置
解决浏览器上网问题: System Setting -> Network -> Network Proxy设置公司的代理 解决apt联网问题: 在/etc/apt/apt.conf文件里加 ...
- day_08 字符编码乱码处理
Python3默认编码是unicode:而Python2是ASCII码.Windows环境默认是gbk编码. 常见编码错误原因: 1. Python解释器的默认编码 2. Python源文件文件编码 ...
- ESP8266内置的定时器库--Ticker库
Ticker的功能非常简单,就是规定时间后调用函数 总体上,根据功能可以把方法分为两大类: 定时器管理方法: 定时器启用方法: detach() 停止定时器 active() 定时器是否 ...
- 启动 jvm 参数小总结
1.启动某项目 nohup java -jar -Xms256m -Xmx512m -Dspring.config.location=/config/application.yml -Dfile.en ...
- spring自定义注解实现登陆拦截器
1.spring自定义注解实现登陆拦截器 原理:定义一个注解和一个拦截器,拦截器拦截所有方法请求,判断该方法有没有该注解.没有,放行:有,要进行验证.从而实现方法加注解就需要验证是否登陆. 2.自定义 ...
- 由于数据库 'XXX' 离线,无法打开该数据库。
大家使用sql server 进行还原的时候可能会遇到: system.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权 这个错误 下面是有一个解决 ...