NumPy是用于数据科学计算的基础模块,可用于存储和处理大型矩阵
NumPy提供两种基本数据对象
一种存储单一数据类型的多维数组
属性 | 说明 |
---|---|
ndim | int 表示数组的维数 |
shape | tuple 表示数组的尺寸,(n,m)->n行m列 |
size | int 返回数组元素总数,形状的乘积 |
dtype | data-type 描述数组中元素的类型 |
item-size | int 表示每个元素的大小(字节) |
创建数组有多种形式
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndim=0)
object:指定创建的数组array
dtype:指定元素类型,默认使用所需最小类型
ndmin:指定维数
import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
# arr1:
# [1,2,3,4]
# arr2:
# [[1,2,3,4],
# [5,6,7,8]]
numpy.arange(float, float, float)
指定开始值,终值,步长来创建一维数组
创建的数组不含终值,但是包含开始值
import numpy as np
arr = np.arange(0, 1, 0.1)
# [ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
numpy.linspace(float, float , int)
指定开始值,终值,元素个数来创建一维数组
创建的数组包含开始值和终值
import numpy as np
arr = np.linspace(0, 1, 9)
# [ 0. 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1. ]
numpy.logspace(float, float, int)
指定开始值,终值,元素个数来创建一个等比一维数组
此处的参数指定的是幂,见下方实例代码
创建的数组包含开始值和终值
import numpy as np
arr = np.logspace(0, 2, 10)
# 此处指定的开始值 = 10^0 = 0
# 终值 = 10^2 = 100
# [ 1. 1.66810054 2.7825594 4.64158883 7.74263683 12.91549665 21.5443469 35.93813664 59.94842503 100. ]
numpy.zeros(tuple)
指定形状,创建一个全部为零的数组
import numpy as np
arr = np.zeros((2, 3))
# [[ 0. 0. 0.]
# [ 0. 0. 0.]]
numpy.eye(int)
指定形状创建一个单位矩阵型数组
import numpy as np
arr = np.eye(3)
# [[ 1. 0. 0.]
# [ 0. 1. 0.]
# [ 0. 0. 1.]]
numpy.diag(array)
以传入的数组元素为对角线,其余位置以0填充
import numpy as np
arr = np.diag([1,2,3,4])
# [[1 0 0 0]
# [0 2 0 0]
# [0 0 3 0]
# [0 0 0 4]]
numpy.ones(tuple)
创建指定形状的元素全部为1的数组
import numpy as np
arr = np.ones((3,5))
# [[ 1. 1. 1. 1. 1.]
# [ 1. 1. 1. 1. 1.]
# [ 1. 1. 1. 1. 1.]]
numpy扩充了原生python类型
类型 | 描述 |
---|---|
bool | 一位存储的布尔类型 |
inti | 由平台决定的整数 |
int8 | 八位整数 (-128~127) |
int16 | 十六位整数(-32768~32767) |
int32 | 三十二位整数(-231~232-1) |
int64 | 六十四位整数(-263~264-1) |
uint* | 整数对应的无符号整数(略) |
float16 | 十六位半精度浮点数 |
float32 | 三十二位单精度浮点数 |
float(64) | 六十四位双精度浮点数 |
complex64 | 复数,使用两个32位浮点数表示实部和虚部 |
complex128 | 复数,使用两个64位浮点数表示实部和虚部 |
每一个数据类型都有转换函数,例如numpy.int()
等
numpy提供了生成随机数的功能,包含在random模块中
numpy.random.random(tuple)
正常的生成指定形状的随机数数组
numpy.random.rand(int,int)
服从均匀分布,生成指定形状的随机数数组
numpy.random.randint(low, high=None, size=None, dtype='1')
low为最小值,high为最大值,size为数组的形状
一维数组的索引相当简单,就是最常见的索引方式
可以直接定位,范围索引,设置步长等
多维数组的每一个维度都有一个索引,各个维度之间用逗号隔开,每个维度的索引可以使用一维索引的形式
这里着重讨论整数序列和布尔值索引
通过传入一个tuple整数序列,可以索引序列中指定的下标
通过传入一个bool数组,可以索引元素为true的位置所指定的下标
ndarray.reshape((tuple))
使用reshape可以重新指定数组的形状,但是要求新的形状不能和原本的形状冲突,数目要吻合
ndarray.ravel()
使用ravel可以展平数组,将数组变为一维形式
ndarray.flatten()
flatten也可以展平数组,但可以选择是横向展平还是纵向展平
numpy.hstack(ndarray, ndarray)
hstack将两个数组进行横向组合,也就是将两个数组横着直接拼接,要求两个数组行数相同
numpy.vstack(ndarray, ndarray)
vstack将两个数组进行纵向组合,将两个数组竖向拼接,要求两个数组列数相同
numpy.concatenate(axis=0)
concatenate既可以横向组合,也可以纵向组合
numpy.hsplit(ndarray, int)
hsplit横向分割
numpy.vsplit(ndarray, int)
vsplit纵向分割
numpy.split(ndarray, int, axis=1)
split既可以横向分割,又可以纵向分割
在NumPy中,矩阵是ndarray的子类
矩阵是继承自二维数组对象
numpy.mat()
可以使用ndarray对象创建矩阵,也可以使用List创建,同时也可以使用字符串形式,例如"1,2,3; 4,5,6"创建一个两行三列矩阵
numpy.matrix()
和mat函数等价
numpy.bmat()
bmat函数用于分块创建矩阵,他传入的是字符串,字符串中指定每一块的矩阵名
import numpy as np
arr1 = np.mat("1,2,3;4,5,6")
arr2 = np.mat("7,8,9;10,11,12")
arr3 = np.bmat("arr1 arr2; arr1 arr1")
# 1 2 3 7 8 9
# 4 5 6 10 11 12
# 1 2 3 1 2 3
# 4 5 6 4 5 6
在NumPy中,对矩阵的运算是对矩阵中每一个元素的运算
属性 | 说明 |
---|---|
T | 返回自身的转置 |
H | 返回自身的共轭转置 |
I | 返回自身的逆矩阵 |
A | 返回自身的二维数组的视图 |
ufunc函数全称为通用函数,能够对数组中的所有元素进行操作的函数
四则运算是对矩阵中的每一个元素进行四则运算,要求两个数组形状相同
比较运算的结果返回一个布尔数组,其中符合条件的位置为True,否则为False
使用np.all()和np.any()获得一个布尔类型作为结果,其中all表示全部符合条件,any表示存在符合条件
不同形状的数组进行算术运算时,需要定义一个运算的规则,这就是广播机制
广播机制有四个原则
NumPy的文件读写主要有二进制读写和文件列表形式的数据读写两种形式
numpy.save(file, arr, allow_pickle=True, fix_imports=True)
参数file为要保存的文件的名称,需要制定文件的路径,若不指定则保存在默认路径下
参数arr时要保存的数组
文件默认扩展名.npy
numpy.savez(file, arr...)
将多个数组保存到一个文件中,文件扩展名.npz
numpy.load(file)
既可以读取含有单个数组的文件,也可以读取含有多个数组的文件
读取多数组时默认使用的索引为arr_1 arr_2 以此类推,也可以自己指定读取索引
写入文件时可以省略扩展名,读取时不能省略
numpy.savetxt(fname, X, fmt=%.18e', delimiter=' ', newline='\n', header='',footer='', comments='# ')
参数fname指定文件名,参数X指定要保存的数组数据,参数delimiter指定分隔符
numpy.loadtxt(fname, delimiter=' ')
load函数将文件加载到一个二维数组中
numpy.genfromtxt(fname, delimiter=',')
此函数面向结构化数组和缺失数据,通常有三个三处
fname文件名,delimiter分隔符,names列标题
数据从第二行开始,因为默认第一行为列标题
numpy的排序方式主要是直接排序和间接排序
ndarray.sort(axis=1)
无返回值,直接对原数组进行操作
可以设置axis参数选择对哪个轴进行排序
ndarray.argsort()
此函数排序完成后返回一个数组,数组元素是排序后元素的原索引值,按排序结果排列
numpy.lexsort()
此函数可以同时接收多个数组组成的元组类型
(说实话这个函数的排序规则有点复杂而且让我觉得没有什么卵用所以就不看了)
numpy.unique(arr)
去重函数返回去重后的结果数组
numpy.tile(A, reps)
A指定要重复的数组,reps指定要重复的次数
横向重复
numpy.repeat(a, repeats, axis=None)
a是需要重复的数组元素,repeats指定重复次数,axis指定要沿哪个轴重复
NumPy中,有许多用于统计分析的函数,几乎所有的统计函数在针对二维数组计算式都需要注意轴的概念
axis=0沿纵轴计算
axis=1沿横轴计算
默认不按照任何一轴,而是计算总值
函数 | 作用 |
---|---|
numpy.sum() | 计算数组的和 |
numpy.mean | 计算数组的均值 |
numpy.std() | 计算数组的标准差 |
numpy.var() | 计算数组的方差 |
numpy.min() | 计算数组的最小值 |
numpy.max() | 计算数组的最大值 |
numpy.argmin() | 计算数组的最小元素的索引 |
numpy.argmax() | 计算数组的最大元素的索引 |
numpy.cumsum() | 计算所有元素的累计和 |
numpy.cumprod() | 计算所有元素的累计积 |