NumPy为数据分析三剑客之一,主要用于数组计算、矩阵运算和科学计算,Python数组计算、矩阵运算和科学计算的核心库
数组相关概念1.一维数组 一维数组很简单,基本和Python列表一样,区别在于数组切片针对的是原始数组(这就意味着,如果对数组进行修改,原始数组也会跟着更改)。
2.二维数组 二维数组本质是以数组作为数组元素的数组。二维数组包括行和列,类似于表格形状,又称为矩阵。
3.三维数组 三维数组是指维数为3的数组结构,也称矩阵列表。三维数组是最常见的多维数组,由于其可以用来描述三维空间中的位置或状态而被广泛使用。
4.轴的概念
轴是NumPy里的axis,指定某个axis,就是沿着这个axis做相关操作
创建数组 array()
import numpy as np arr1 = np.array([1,2,3],ndmin=4)参数说明:
object:任何具有数组接口方法的对象。
dtype:数据类型。
copy:布尔型,可选参数,默认值为True,则object对象被复制;否则,只有当array返回副本,object参数为嵌套序列,或者需要副本满足数据类型和顺序要求时,才会生成副本。
order:元素在内存中的出现顺序,值为K、A、C、F。如果object参数不是数组,则新创建的数组将按行排列(C),如果值为F,则按列排列;如果object参数是一个数组,则C(按行)、F(按列)、A(原顺序)、K(元素在内存中的出现顺序)成立。
subok:布尔型。如果值为True,则将传递子类;否则返回的数组将强制为基类数组(默认值)。
ndmin:指定生成数组的最小维数。
数组的复制 copy=True当运算和处理数组时,为了不影响到原数组,就需要对原数组进行复制,而对复制后的数组进行修改删除等操作都不会影响到原数组。数组的复制可以通过copy参数实现
通过ndmin参数控制最小维数数组可分为一维数组、二维数组和多维数组,通过ndmin参数可以控制数组的最小维数。无论给出的数据的维数是多少,ndmin参数都会根据最小维数创建指定维数的数组。
一个维度就是一个中括号,三个维度就是嵌套三个数组
不同方式创建数组 1.创建指定维度和数据类型未初始化的数组 emptyimport numpy as np n = np.empty([2,3],dtype=np.uint8) print(n)
打印结果[[240 120 201] [176 199 1]]
数组元素为随机数 ,未被初始化,可以通过dtype改变数组类型
2.创建指定维度(以0填充)的数组 zerosimport numpy as np n = np.zeros(3) print(n)
结果为 [0. 0. 0.]
3.创建指定维度(以1填充)的数组 onesimport numpy as np n = np.ones(3) print(n)
结果 [1. 1. 1.]
4.创建指定维度和类型的数组并以指定值填充 fullimport numpy as np n = np.full((3,3), 8) print(n)
结果[[8 8 8] [8 8 8] [8 8 8]]
从数值范围创建数组 1.通过arange()函数创建数组
参数说明:
start:起始值,默认值为0。
stop:终止值(不包含)。
step:步长,默认值为1。
dtype:创建数组的数据类型,如果不设置数据类型,则使用输入数据的数据类型。
2.使用linspace()函数创建等差数列参数说明:
start:序列的起始值。
stop:序列的终止值,如果endpoint参数的值为True,则该值包含于数列中。
num:要生成的等步长的样本数量,默认值为50。
endpoint:如果值为True,数列中包含stop参数的值;反之则不包含。默认值为True。
retstep:如果值为True,则生成的数组中会显示间距;反之则不显示。
dtype:数组的数据类型。
3.使用logspace()函数创建等比数列参数说明:
start:序列的起始值。
stop:序列的终止值。如果endpoint参数值为True,则该值包含于数列中。
num:要生成的等步长的数据样本数量,默认值为50。
endpoint:如果值为True,则数列中包含stop参数值;反之则不包含。默认值为True。
base:对数log的底数。
dtype:数组的数据类型。
生成随机数组 1.rand()函数rand()函数用于生成(0,1)之间的随机数组,传入一个值随机生成一维数组,传入一对值则随机生成二维数组
numpy.random.rand(d0,d1,d2,d3,...,dn)
参数d0,d1,…,dn为整数,表示维度,可以为空
2.randn()函数randn()函数用于从正态分布中返回随机生成的数组
numpy.random.randn(d0,d1,d2,d3,...,dn)
参数d0,d1,…,dn为整数,表示维度,可以为空。
3.randint()函数randint()函数与NumPy的arange()函数类似。randint()函数用于生成一定范围内的随机数组,左闭右开区间
参数说明:
low:低值(起始值),整数,且当参数high不为空时,参数low应小于参数high;否则程序会出现错误。
high:高值(终止值),整数。
size:数组维数,整数或者元组,整数表示一维数组,元组表示多维数组。默认值为空,如果为空,则仅返回一个整数。
4.normal()函数normal()函数用于生成正态分布的随机数
参数说明:loc:正态分布的均值,对应正态分布的中心。loc=0说明是一个以y轴为对称轴的正态分布。
scale:正态分布的标准差,对应正态分布的宽度,scale值越大,正态分布的曲线越“矮胖”;scale值越小,曲线越“高瘦”。
size:表示数组维数
从已有的数组中创建数组 1.asarray()函数asarray()函数用于创建数组,其与array()函数类似
a:可以是列表、列表的元组、元组、元组的元组、元组的列表或多维数组。
dtype:数组的数据类型。
order:值为C和F,分别代表按行排列和按列排列,即数组元素在内存中的出现顺序。
2.frombuffer()函数 参数说明:buffer:实现了buffer方法的对象。
dtype:数组的数据类型。
count:读取的数据数量,默认值为-1,表示读取所有数据。
offset:读取的起始位置,默认值为0。
3.fromiter()函数fromiter()函数用于从可迭代对象中建立数组对象
参数说明:iterable:可迭代对象。
dtype:数组的数据类型。
count:读取的数据数量,默认值为-1,表示读取所有数据
4.empty_like()函数empty_like()函数用于创建一个与给定数组具有相同维度和数据类型且未初始化的数组
参数说明:prototype:给定的数组。
dtype:覆盖结果的数据类型。
order:指定数组的内存布局。其中C(按行)、F(按列)、A(原顺序)、K(数据元素在内存中的出现顺序)。
subok:默认情况下,返回的数组被强制为基类数组。如果值为True,则返回子类。
5.zeros_like()函数创建以0填充的数组
zeros_like()函数用于创建一个与给定数组维度和数据类型相同,并以0填充的数组
6.ones_like()函数ones_like()函数用于创建一个与给定数组维度和数据类型相同,并以1填充的数组
7.full_like()函数full_like()函数用于创建一个与给定数组维度和数据类型相同,并以指定值填充的数组
参数说明:a:给定的数组。
fill_value:填充值。
dtype:数组的数据类型,默认值为None,则使用给定数组的数据类型。
order:指定数组的内存布局。其中C(按行)、F(按列)、A(原顺序)、K(数组元素在内存中的出现顺序)。
subok:默认情况下,返回的数组被强制为基类数组。如果值为True,则返回子类。
数组的基本操作| 数据类型 | 描述 |
|---|---|
| bool_ | 存储一个字节的布尔值(真或假) |
| int_ | 默认整数,相当于c的long,通常为int32 |
| inte | 相当于c的int,通常为int32 |
| intp | 用于索引的整数,相当于C的size_t,通常为int64 |
| int8 | 字节(~128~127) |
| int16 | 16为整数(~32768~32767) |
| int32 | 32位整数(~2147483648~2147483647) |
| int64 | 64位整数(~9223372036854775808~9223372036854775807) |
| unint8 | 8位无符号整数(0~255) |
| unint16 | 16位无符号整数(0~65535) |
| unint32 | 32位无符号整数(0~4294967295) |
| unint64 | 64位无符号整数(0~18446744073709551615) |
| float | _float64的简写 |
| float16 | 半精度浮点,1个符号位,5位指数,10位尾数 |
| float32 | 半精度浮点,1个符号位,8位指数,23位尾数 |
| float64 | 半精度浮点,1个符号位,11位指数,52位尾数 |
| complex_ | complex128类型的简写 |
| complex64 | 复数,由两个32位浮点表示(实部和虚部) |
| complex128 | 复数,由两个64位浮点表示(实部和虚部) |
| datetime64 | 日期时间类型 |
| timedelta64 | 两个时间之间的间隔 |
转化数据类型,直接np.类型(数据)即可
数组运算不用编写循环即可对数据执行批量运算,这就是NumPy数组运算的特点,NumPy称之为矢量化。大小相等的数组之间的任何算术运算NumPy都可以实现
1.加法运算 + 2.减法 -、乘法 * 和除法运算 / 3.幂运算 ** 4.比较运算 >=大于等于 ==等于 <=小于等于 !=不等于 返回值是布尔类型的 5.数组的标量运算标量其实就是一个单独的数;而向量是一组数,这组数是顺序排列的,这里我们理解为数组。那么,数组的标量运算也可以理解为是向量与标量之间的运算。
例如:米转换千米直接 n1/1000
注意:我们在加减乘除数组运算时,要保证数组的行或者列相同
数组的索引和切片NumPy数组元素是通过数组的索引和切片来访问和修改的,因此索引和切片是NumPy中最重要、最常用的操作
1.索引所谓数组的索引,即用于标记数组中对应元素的唯一数字,从0开始,即数组中的第一个元素的索引是0,以此类推。NumPy数组可以使用标准Python语法x[obj]的语法对数组进行索引,其中x是数组,obj是索引。
输出一行的第一个数是[0]
输出第二行第三列[2][3]
2.切片式索引 参数说明:start:起始索引。
stop:终止索引。
step:步长。
注意:(1)索引是左闭右开区间,
(2)当没有state参数,代表从索引0开始取数
(3)start、stop和step这3个参数都可以是负数,代表反向索引
3.二维数组索引二维数组索引可以使用array[n,m]的方式,以逗号分隔,表示第n个数组的,第m个元素。
4.二维数组切片式索引n[行,列]
数组重塑 reshape()数组重塑实际是更改数组的形状
1.一维数组重塑维数组重塑就是将数组重塑为多行多列的数组
注意:重塑的数组必须能被一维数组整除,换句话说就是重塑的数组相加的数据必须等于一维数组,不能有空余或者多出
2.多维数组重塑多维数组重塑同样使用reshape()方法。
3.数组转置 T transpose()T是transpose的缩写,实现行列数据的转换
数组的增、删、改、查 1.数组的增加 hstack()水平方向添加 vstack()垂直方向添加数组数据的增加可以按照水平方向增加数据,也可以按照垂直方向增加数据。水平方向增加数据主要使用hstack()函数,垂直方向增加数据主要使用vstack()函数。
2.数组的删除 delete()删除指定的数组 delete(数组,索引,axis=0)
axis=0表示删除行,axis=1表示删除列
3.数组的修改修改数组或数组元素时,直接为数组或数组元素赋值即可
4.数组的查询 where()数组的查询同样可以使用索引和切片方法来获取指定范围的数组或数组元素,还可以通过where()函数查询符合条件的数组或数组元素
numpy.where(condition,x,y)
第一个参数为一个布尔数组,第二个参数和第三个参数可以是标量也可以是数组。满足条件(参数condition),输出参数x,不满足条件输出参数y。
如果想保留不满足条件的值,可以直接让他等于我们的数组



