作者:初次知晓
邮箱:lr_1052107892@outlook.com
资料参考
[菜鸟教程](https://www.runoob.com/)
NumPy概述
NumPy(Numerical Python)是python的一个扩展程序库,支持大量的维度数据与矩阵运算,针对数据运算提供大量的数学函数库,包括:数学,逻辑,形状操作,排序,选择,输入输出,离散傅里叶变换等…
使用numpy的优势:
1.处理同样数值计算任务,比纯python更便捷
2.numpy中的数组的存储效率和输入输出性能远远优于python中等价的基本数据结构
3.numpy在底层算法比纯python代码高效
Ndarray
NDarray是Ndarray中数组的数据类型
NumPy 最重要的一个特点是其 N 维数组对象 NDarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
NDarray 对象是用于存放同类型元素的多维数组。
NDarray 中的每个元素在内存中都有相同存储大小的区域。
NDarray 内部由以下内容组成:
• 一个指向数据(内存或内存映射文件中的一块数据)的指针。
• 数据类型或 dtype,描述在数组中的固定大小值的格子。
• 一个表示数组形状(shape)的元组,表示各维度大小的元组。
• 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数
Ndarray的属性
例子:a = np.ones(shape=(3,4,5),dtype=int) # 创建一个三维,每个维度四行五列且元素全为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 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 1][1 1 1 1 1][1 1 1 1 1]]]四个重要属性:
1.ndim:维度print(a.ndim)3
2.shape:形状(各维度的长度)print(a.shape)(3, 4, 5)
3.size:总长度print(a.size)60
4.dtype:元素类型print(a.dtype)int32如何判断维度?数组.shape会返回该数组的形状返回几个数字,就是几维度对于一维数组,会返回:(列数)对于二维数组,会返回:(行数,列数)对于三维数组,会返回:(块数,行数,列数)对于N 维数组,会返回:(…..,行数,列数)最后两个的数值固定为行数,列数除这两个数之外的其他所有数相乘,即为:块数
NumPy数组中数据的数据类型
Numpy要求数组中所有数据优先级相同
如果不相同将会按照优先级:str>float>int
强制统一数组内所有数据的数据结构
示例:
#优先级:str>float>intimport numpy as np
#浮点型和整形
a = np.array([3.14,2])
print(a)[ 3.14 2. ] #2. 表示2.0#浮点型和字符型
b = np.array([3.14,"love"])
print(b)['3.14' 'love']
NumPy数组
数组是一种类似于python中列表的一个数据容器,在numpy中一切皆数据数组是由[]包含起来的,[]嵌套级数表示数组的维度一维数组 […]二维数组 [[…]…[…]…]三维数组 [[[…]…[…]…]…[[…]…[…]…]…]以此类推……
数组中有一个形状的概念,查看数组形状:语法:数组名.shape[[1 1 1 1][1 1 1 1][1 1 1 1]]print(c.shape)输出:(3, 4)对于二维数组shape会返回该数组的行和列,即:(行,列)[[[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][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][1 1 1 1 1][1 1 1 1 1]]]print(c.shape)输出:(3, 4, 5)对于三维数组shape会返回该数组的块数,行,列,即:(块数,行,列)
创建数组
一.使用array创建数组
一.使用array创建数组
语法:变量 = numpy.array(数组数据)如: a = np.array([1,2,3])最常用
二.使用ones创建数组
二.使用ones创建数组
创建一个所有元素都为1的多维数组语法:numpy.ones(shape,dtype=None,order='C')Shape:形状Dtype=None:元素类型Order:{'C','F'}:可选项c = np.ones(shape = (3,4,5),dtype = np.int16)print(c) #创建一个三个四行五列的数组[[[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][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][1 1 1 1 1][1 1 1 1 1]]]
三.使用zeros创建数组
三.使用zeros创建数组
创建一个所有元素都为0的多维数组语法:numpy.ones(shape,dtype=None,order='C')Shape:形状Dtype=None:元素类型Order:{'C','F'}:可选项d = np.zeros(shape = (5,5),dtype = np.int16)print(d) # 创建一个五行五列的数组[[0 0 0 0 0][0 0 0 0 0][0 0 0 0 0][0 0 0 0 0][0 0 0 0 0]]
四.使用full创建数组
四.使用full创建数组
创建一个所有元素都为指定元素的多维数组语法:numpy.full(shape,fill_value = None,dtype = None,order='C')Shape:形状Fill_value = None :填充的值Dtype=None:元素类型Order:{'C','F'}:可选项e = np.full(shape = (3,4),fill_value = 2)print(e)[[2 2 2 2][2 2 2 2][2 2 2 2]]
五.使用eye创建数组
五.使用eye创建数组
创建一个对角线为1其他位置为0的二维数组语法:numpy.eye(N,M=None,k=0,dtpye=float)N:行数M:列数,None(不写)表示和行数一样k=0Dtpye=None:元素类型f = np.eye(6,6,dtype=np.int16)print(f)[[1. 0. 0. 0. 0. 0.][0. 1. 0. 0. 0. 0.][0. 0. 1. 0. 0. 0.][0. 0. 0. 1. 0. 0.][0. 0. 0. 0. 1. 0.][0. 0. 0. 0. 0. 1.]]
六.使用linspace创建数组
六.使用linspace创建数组
创建一个等差数列语法:numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtpye=None)Start:开始值Stop:结束值Num=50:等差数列中默认有50个数Endpoint=True:是否包含结束值Retsep=False:是否返回等差值(公差)Dtype=None:元素类型g = np.linspace(1,10,num=10,dtype=np.int16)print(g)[ 1 2 3 4 5 6 7 8 9 10]
七.使用arange创建数组
七.使用arange创建数组和range的语法一致语法:numpy.arange(start,stop,step,dtype=None)Start:开始值,可选stop:结束值step:步长,可选Dtype=None:元素类型h = np.arange(10)print(h)[0 1 2 3 4 5 6 7 8 9]
八.使用random.randint创建数组
八.使用random.randint创建数组创建一个随机整数的多维数组语法:random.randint(low,high=None,size=None,dtype='I')low:最小值High=None时,生成的数值在[0,low]之间Size=None:数组形状Dtype=None:元素类型bi = np.random.randint(10) #[0,10)如果只填一个数字,会形成一个左闭右开的条件,并且只会输出一个数值i = np.random.randint(1,10) #[1,10)如果填两个数,会形成一个指定数值的区间,并随机输出一个数值i = np.random.randint(1,10,size = (3,4))[[5 1 5 5][8 1 8 1][8 8 5 8]]指定形状之后,会根据形状取出一定数量的数值(在指定区间内随机取)
九.使用random.randn创建数组
九.使用random.randn创建数组创建一个服从标准正态分布的多维数组以0为均数,以1为标准差的正态分布,记为 N(0,1) 标准正态分布语法: numpy.random.randn(d0,d1,…,dn)d0,d1,…,dn为该数组的形状,如果要生成一个3行四列的数组:j = np.random.randn(3,4)print(j)[[-0.2933226 -0.76987489 0.40534212 -0.21640745] [-0.17778317 -0.52134658 1.88350071 -0.82146952] [-1.22999297 -1.51803949 1.61657564 0.37700461]]
十.使用random.normal创建数组
十.使用random.normal创建数组创建一个服从正态分布的多维数组语法:numpy.random.normal(loc=0.0,scale=1.0,size=None)loc=0.0:均值,对应着正态分布的中心scale:标准差,对应分布的宽度,scale越大,正态分布的缺陷越矮胖,scale越小,曲线越高瘦size=None:数组形状k=np.random.normal(loc=0.0,scale=1.0,size=(3,4))print(k)[[-0.23246216 0.26749955 -0.29392166 0.3362761 ] [-1.91780129 -0.6669381 0.20897606 1.50653718] [ 0.28661731 -1.02116974 0.5327165 0.3193466 ]]
十一.使用random.random创建数组
十一.使用random.random创建数组创建一个元素为0-1(左闭右开)的随机数的多维数组语法:numpu.random.random(size=None)Size = None:数组形状l=np.random.random(size=(3,4))print(l)[[0.09826337 0.78667023 0.58771261 0.10221402] [0.38993212 0.24497684 0.04957887 0.51181572] [0.17323217 0.9333488 0.25844232 0.79559424]]
十二.使用random.rand创建数组
十二.使用random.rand创建数组创建一个元素为0-1的随机数多维数组与random.random一致,但语法不同语法:numpy.random.rand(形状)m=np.random.rand(3,4)print(m)[[0.99871438 0.45171269 0.30256666 0.81072106] [0.34212124 0.59970651 0.77702736 0.03364478] [0.35500722 0.71010727 0.02300558 0.92293601]]