【python 6】Numpy
文章目录
- 一、创建ndarry
- 1、使用`np.array()` 由 python list 创建
- 2、使用np的常规函数创建
- 二、ndarry 的属性
- 三、ndarry 的基本操作
- 四、ndarry 的矩阵操作
Numpy 是python的数值计算的扩展
# 查看版本 .__version__
import numpy as np
np.__version__
>>>
'1.16.2'
Numpy 包的核心是 ndarry 对象,n维数组,电脑上所有数据都是数字形式保存。
Numpy 中文手册
一、创建ndarry
1、使用np.array()
由 python list 创建
l = [1,2,3,4,5]
print(type(l))
nd = np.array(l)
print(type(nd))
>>>
<class 'list'>
<class 'numpy.ndarray'>
l2 = [[1,3,5,7],[2,4,6,8]]
print(l2)
nd = np.array(l2)
print(nd)
>>>
[[1, 3, 5, 7], [2, 4, 6, 8]]
[[1 3 5 7][2 4 6 8]]
np.array
和 list
的异同:
- np.arrry 更加强大,可调用的方法很多
- 底层是 c 和 c++ 实现的,运行速度快
%timeit nd.sum()
>>>
2.13 µs ± 44.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
def sum2(x):ret = 0for i in x:ret += ireturn ret
%timeit sum2(nd)
>>>
2.78 µs ± 81.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
2、使用np的常规函数创建
1、np.ones(shape,dtype=None,order='C)
np.ones((5,5),np.int8)
>>>
array([[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1]], dtype=int8)
2、np.zeros()
np.zeros((2,3,4),np.float16)
>>>
array([[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]],[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]]], dtype=float16)
3、np.full(shape, fill_value, dtype=None,order='C'
np.full((3,5),3.14)
>>>
array([[3.14, 3.14, 3.14, 3.14, 3.14],[3.14, 3.14, 3.14, 3.14, 3.14],[3.14, 3.14, 3.14, 3.14, 3.14]])
4、np.eye(N, M=None, k=0, dtype = float)
np.eye(5)
>>>
array([[1., 0., 0., 0., 0.],[0., 1., 0., 0., 0.],[0., 0., 1., 0., 0.],[0., 0., 0., 1., 0.],[0., 0., 0., 0., 1.]])
5、np.linespace(start, stop, num=50, endpoint=True,retstep=False,dtype=None)
# 也叫等差数列
np.linspace(0,100,num=101)
>>>
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21.,22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43.,44., 45., 46., 47., 48., 49., 50., 51., 52., 53., 54.,55., 56., 57., 58., 59., 60., 61., 62., 63., 64., 65.,66., 67., 68., 69., 70., 71., 72., 73., 74., 75., 76.,77., 78., 79., 80., 81., 82., 83., 84., 85., 86., 87.,88., 89., 90., 91., 92., 93., 94., 95., 96., 97., 98.,99., 100.])
6、np.arange(start, stop, step, dtype=None)
# 等间隔数列
np.arange(1,10,2)
>>>
array([1, 3, 5, 7, 9])
7、np.random.randint(low,high=None,size=None,dtype='l')
# 一定范围内的随机数
np.random.randint(0,100,(2,4))
>>>
array([[98, 63, 18, 11],[40, 58, 62, 12]])
8、np.random.randn(d0, d1,...,dn)
# 正态分布,均值为 0,方差为 1
np.random.randn(4,5)array([[ 0.41147432, -0.56841502, -0.64467238, -0.88004511, -0.22976166],[-0.14085248, -0.47433223, -0.20435651, 0.42996496, 1.0578385 ],[-0.60056564, 1.10390688, -0.66069103, 0.3525401 , -0.75591328],[-1.22475853, -0.18057379, 0.56044618, 2.00066107, 1.47393763]])
9、np.random.normal(loc=0.0, scale = 1.0, size = None)
# 自定义正态分布
# loc 均值,scale 标准差,size 尺寸
np.random.normal(1.75,0.5,10)
>>>
array([1.36952483, 2.34225265, 1.09145538, 2.71158254, 0.96843264,1.79764286, 1.7570981 , 1.8556677 , 2.7517673 , 2.18922818])
# .round(n) 小数点后保留n位
np.random.normal(1.75,0.5,10).round(2)
>>>
array([1.42, 2.12, 0.84, 1.72, 1.52, 1.17, 1.61, 2.05, 2.68, 1.7 ])
10、np.random.random(size=None)
# 生成 0~1 的随机数,左闭右开
np.random.random(10)
>>>
array([0.62466642, 0.71381154, 0.63322465, 0.36875306, 0.41764157,0.11489776, 0.53775854, 0.56280265, 0.24020451, 0.37022401])
二、ndarry 的属性
四个必记的参数:
- ndim:维度
- shape:形状
- size:总长
- dtype:元素类型
nd = np.random.normal(1.75,10,10).round(2)
print(nd)
>>>
[ 6.7 12.78 -10.42 -3.69 8.15 -0.28 13.65 -0.48 17.71 4.11]
nd.shape
nd.size
nd.ndim
nd.dtype
>>>
(10,)
10
1
dtype('float64')
三、ndarry 的基本操作
1、索引
ndarry 索引和列表完全一致,多维索引和一维、二维索引规律完全相同
nd2 = np.random.randint(0,150,(4,5))
print(nd2)
>>>
[[ 91 115 78 49 145][141 78 117 21 18][ 53 93 110 26 128][ 38 93 105 27 65]]
nd2[1,1]
nd2[2]
>>>
78
array([ 53, 93, 110, 26, 128])
2、切片
nd2[0:2]
>>>
array([[ 91, 115, 78, 49, 145],[141, 78, 117, 21, 18]])
nd2[-2:]
>>>
array([[ 53, 93, 110, 26, 128],[ 38, 93, 105, 27, 65]])
nd2[0:3,0:3]
>>>
array([[ 91, 115, 78],[141, 78, 117],[ 53, 93, 110]])
数据翻转:
print(nd)
>>>
[ 6.7 12.78 -10.42 -3.69 8.15 -0.28 13.65 -0.48 17.71 4.11]
nd[::-1]
>>>
array([ 4.11, 17.71, -0.48, 13.65, -0.28, 8.15, -3.69, -10.42,12.78, 6.7 ])
nd[::2]
>>>
array([ 6.7 , -10.42, 8.15, 13.65, 17.71])
练习:对图像操作
from PIL import Image
img = Image.open('resnet18.jpg')
img_data = np.array(img)
img_data.shape
img_data.dtype
>>>
# 行 列 页
(3016, 4032, 3)
# 图像是 uint8 类型,2^8=256,可以表示 256 个值(-128,127)
dtype('uint8')
int8:8位有符号整型(-127~128)
uint8:8位无符号整型(0~255)
img_data.max()
>>>
226
img_data.min()
>>>
0
3、变形
# reshape
nd
>>>
array([11. , 2.41, 1.38, 13.22, 4.9 , -2.03, 8.64, -9.92, -1.88, -4.34])
# reshape
nd2 = nd.reshape(2,5)
print(nd2)
>>>
[[11. , 2.41, 1.38, 13.22, 4.9 ],[-2.03, 8.64, -9.92, -1.88, -4.34]]
4、转置
# np.transpose
nd2.transpose()
>>>
array([[11. , -2.03],[ 2.41, 8.64],[ 1.38, -9.92],[13.22, -1.88],[ 4.9 , -4.34]])
5、级联
# np.concatenate()
np.concatenate([nd2,nd2])
>>>
array([[11. , 2.41, 1.38, 13.22, 4.9 ],[-2.03, 8.64, -9.92, -1.88, -4.34],[11. , 2.41, 1.38, 13.22, 4.9 ],[-2.03, 8.64, -9.92, -1.88, -4.34]])
6、水平级联+竖直级联
# np.hstack 水平方向,axis = 1
nd3 = np.hstack([nd2,nd2])
print(nd3)
>>>
[[11. 2.41 1.38 13.22 4.9 11. 2.41 1.38 13.22 4.9 ][-2.03 8.64 -9.92 -1.88 -4.34 -2.03 8.64 -9.92 -1.88 -4.34]]
# np.vstack 竖直方向,axis=0
nd4 = np.vstack([nd2,nd2])
print(nd4)
>>>[[11. 2.41 1.38 13.22 4.9 ][-2.03 8.64 -9.92 -1.88 -4.34][11. 2.41 1.38 13.22 4.9 ][-2.03 8.64 -9.92 -1.88 -4.34]]
7、切分
# np.split(x,N) 平均分成 N 份
print(nd4)
nd5 = np.split(nd4, 4)
print(nd5)
>>>
[[11. 2.41 1.38 13.22 4.9 ][-2.03 8.64 -9.92 -1.88 -4.34][11. 2.41 1.38 13.22 4.9 ][-2.03 8.64 -9.92 -1.88 -4.34]][array([[11. , 2.41, 1.38, 13.22, 4.9 ]]),
array([[-2.03, 8.64, -9.92, -1.88, -4.34]]),
array([[11. , 2.41, 1.38, 13.22, 4.9 ]]),
array([[-2.03, 8.64, -9.92, -1.88, -4.34]])]# np.split(x,[N1,N2]) 从 N1 行和 N2 行分别切开
nd6 = np.split(nd4,[1,3])
>>>
[array([[11. , 2.41, 1.38, 13.22, 4.9 ]]),array([[-2.03, 8.64, -9.92, -1.88, -4.34],[11. , 2.41, 1.38, 13.22, 4.9 ]]),array([[-2.03, 8.64, -9.92, -1.88, -4.34]])]
# np.vsplit
np.vsplit(nd4,4)
>>>
[array([[11. , 2.41, 1.38, 13.22, 4.9 ]]),array([[-2.03, 8.64, -9.92, -1.88, -4.34]]),array([[11. , 2.41, 1.38, 13.22, 4.9 ]]),array([[-2.03, 8.64, -9.92, -1.88, -4.34]])]
# np.hsplit
nd7 = np.hsplit(nd4,5)
[array([[11. ],[-2.03],[11. ],[-2.03]]), array([[2.41],[8.64],[2.41],[8.64]]), array([[ 1.38],[-9.92],[ 1.38],[-9.92]]), array([[13.22],[-1.88],[13.22],[-1.88]]), array([[ 4.9 ],[-4.34],[ 4.9 ],[-4.34]])]
8、副本
nd7 = nd5
id(nd7)
id(nd5)
>>>
2179900151752
2179900151752
# 使用 copy
nd7 = nd5
id(nd7)
id(nd5)
>>>
2179871747976
2179900151752
9、numpy 的统计学:
平均值、中位数、方差、标准差、协方差、关联
# 直方图
import numpy as np
nd = np.random.randint(0,1000,100)
np.histogram(nd, bins=10)
>>>
# 第一个 array 是每个 bin 里边的数值个数
# 第二个 array 是 bin 的取值范围
(array([13, 10, 7, 12, 8, 5, 11, 11, 5, 18], dtype=int64),array([ 10. , 108.8, 207.6, 306.4, 405.2, 504. , 602.8, 701.6, 800.4, 899.2, 998. ]))
10、操作文件
# 保存 npy 文件,np.save,npy 文件是二进制文件
np.save('./data.npy',nd)
# load 文件
np.load('./data.npy')
# 保存 txt 文件
np.savetxt('./data.txt',nd)
# 加载 txt 文件
np.loadtxt('./data.txt')
四、ndarry 的矩阵操作
1、基本矩阵操作
1)算数运算符:
2)矩阵积
a = np.random.randint(0,100,(4,5))
b = np.random.randint(0,100,(5,4))
np.dot(a,b)
>>>
array([[16215, 14663, 15557, 21490],[ 9840, 9357, 9573, 16708],[14834, 14976, 16061, 20842],[15684, 16925, 17148, 15196]])
2、广播机制
- 规则一:为缺失的维度补1
- 规则二:假定缺失元素用已有的值填充
m = np.ones((2,3))
print('m:',m)
a = np.arange(3)
print('a:',a)
m+a
>>>m: [[1. 1. 1.][1. 1. 1.]]
a: [0 1 2]
array([[1., 2., 3.],[1., 2., 3.]])
3、排序
1、排序
# np.sort(nd)
# nd.sort
2、部分排序
# np.partition(x, kth=N),排前 N 个最小的
# np.partition(x, kth=-N),排前 N 个最大的
nd2 = np.random.randint(2,30,10)
print(nd2)
np.partition(nd2,kth = 2) # 只排前两个最小的
>>>
[10 4 22 13 24 16 28 22 22 22]
array([ 4, 10, 13, 22, 24, 16, 28, 22, 22, 22])
【python 6】Numpy相关推荐
- 【Python数据清洗】numpy.take()用法
numpy.take()用法 学了Python很长时间了但是一直没有去研究take的使用方法 今天周末加班研究一下 写一个简单的笔记,基本上都是借鉴别人的 其旨在根据提供的索引值将元素形成数组输出,如 ...
- [转载] 【python系列】numpy中的tile函数
参考链接: Python中的numpy.tile tile函数 在看机器学习实战这本书时,遇到numpy.tile(A,B)函数,愣是没看懂怎么回事,装了numpy模块后,实验了几把,原来是这样子: ...
- 【Python实验】Numpy基础
目录 [实验需求] [实验内容] [实验步骤] 实验(1) 学会如何安装第三方类库, 采用pip安装itchat和tensorflow,并通过导入来验证是否安装成功
- 【python数据分析】numpy取整方法np.round(),np.floor()等
numpy取整的方法 包含np.round(), np.floor(), np.ceil(), np.rint(), np,trunc(), np.modf() #取整函数 #np.round(),n ...
- 【Python进阶】你真的明白NumPy中的ndarray吗?
欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...
- dataframe转化为array_【Python专栏】12 种高效 Numpy 和 Pandas 函数为你加速分析
来源:机器之心 编译:Jamin.杜伟.张倩 我们都知道,Numpy 是 Python 环境下的扩展程序库,支持大量的维度数组和矩阵运算:Pandas 也是 Python 环境下的数据操作和分析软件包 ...
- 【Python进阶】带你使用Matplotlib进行可视化
欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...
- 【Python进阶】实战Python图形文件操作基本编程
欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...
- 【Python进阶】实战Python面向对象基本编程
欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...
最新文章
- JAVA偏向锁的什么时候释放_Java中的偏向锁
- AMD规范:简单而优雅的动态载入JavaScript代码
- windows 检测无键鼠操作时间_HP快速卡简易操作流程
- linux系统网络对时,Linux系统网络优化【转】
- [C#]利用键代码自动转换生成字母键或其它键信息
- java datetime 转换_如何实现Java日期时间格式转换
- python爬取商城数据_Python爬取新版CRMEB小程序商城后台订单数据,保存为excel
- innodb doublewrite
- mysql amoeba 事务_MySQL基于Amoeba实现读写分离
- 用递归函数和栈操作逆序一个栈
- c语言字符串汇编,C语言调用汇编实现字符串对换
- csdn积分c币获取方法
- Linux编译安装PHP7.4.24及启动
- 蓝光护目镜 v6.66.6.3
- 2021年广东专精特新中小企业补助及小巨人企业补贴
- android 闪屏 实现,Android游戏闪屏实现步骤详解
- 西南大学奥鹏教育计算机基础答案,9124《 计算机图像处理基础》20秋西南大学在线作业答案资料...
- 台式机尺寸相关信息整理
- 我一生中最重要的12个人
- iTunes 给iPhone制作铃声
热门文章
- centos 输入密码正确进不去系统
- 老罗学习MVC之旅:MVC组件分析
- FOSRestBundle功能包:自动路由生成-单REST风格控制器
- Ubuntu一键安装LAMP环境
- 战双帕弥什显示服务器满员,战双帕弥什星火和信标服务器有何区别
- python操作access数据库未发现数据源名称_ASP连接ACCESS数据库失败,提示“未发现数据源名称并且未指定默认驱动程序”...
- java启动监听器报错_JAVA通过JDBC连接Oracle数据库详解【转载】
- mysql not exists无效_分析MySQL中哪些情况下数据库索引会失效
- 二模网络_初二 八下英语 教学课件、作业课件、教案等(网络资源)
- 手机端适应_手机网站开发制作和电脑pc端有哪些区别