【Python】numpy_科学计算的基础库
简介
Numpy中的数组的存储效率和输入输出性能均优于Python中等价的基本数据结构
Numpy是一个开源的Python的科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组及矩阵的操作,对于同样的计算任务有着比Python更简洁的指令和更高效的算法。
Numpy使用nadarray对象来处理多维数组,该对象是一个快速而灵活的数据容器。
安装依赖库
pip install numpy
引用
import numpy as np
常用对象
0、np.set_printoptions()用于控制Python中小数的显示精度
np.set_printoptions(precision=None, threshold=None, linewidth=None, suppress=None, formatter=None)
参数
precision:控制输出结果的精度(即小数点后的位数),默认值为8
threshold:当数组元素总数过大时,设置显示的数字位数,其余用省略号代替(当数组元素总数大于设置值,控制输出值得个数为6个,当数组元素小于或者等于设置值得时候,全部显示),当设置值为sys.maxsize(需要导入sys库),则会输出所有元素
linewidth:每行字符的数目,其余的数值会换到下一行
suppress:小数是否需要以科学计数法的形式输出
formatter:自定义输出规则
示例:
# 取消科学计数法 np.set_printoptions(suppress=True)
1、 np.array() 新建数组 <可以直接把list转成ndarray>
语法:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数:
- object 要新建的数组对象
- dtype = None 数组的数据类型
- copy = True 对象是否被复制
- order = None C:按行, F:按列, A:任意 默认 A
- subok = False 返回的数组默认未基类数组,True 返回子类
- ndmin = 0 指定返回数组的最小维数
示例:
# coding:utf-8 import numpy as np np.set_printoptions(suppress=True) # 取消科学计数法 if __name__ == "__main__": """run""" np_a = np.array([1, 2, 3, 4]) print("创建ndarray 数组:", np_a, "类型:", type(np_a), ' ', np_a.shape) np_b = np.array([[0.1, 0.2, 0.3], [11, 12, 13, 14]], dtype=object) print("创建ndarray 数组:", np_b, "类型:", type(np_b), ', shape对应维度元素个数', np_b.shape) np_c = np.array([1, 2, 3, 4], ndmin=3) print("创建ndarray 数组:", np_c, "类型:", type(np_c), 'ndmin,返回数组的最小维数, shape对应维度元素个数', np_c.shape)
执行结果
2、np.arange() 生成range数据
参数:
start | 起始值(默认为0) |
end | 终止值(不包含) |
step | 步长,默认为1 |
dtype | 返回ndarray的数据类型 |
创建一维等差数组
np_d = np.arange(1, 10, 2) print("生成range数据:", np_d, "类型:", type(np_d), '一维数组元素个数:', np_d.shape)
执行结果:
创建二维等差数组
obj.reshape(shape) 维度变换
npd_a = np.arange(6).reshape(2, 3) print("创建二维等差数组:", npd_a)
执行结果
3、np.ones() 创建指定形状的数组,数组元素以 1来填充
示例
np_e = np.ones(5, dtype=int) print("生成全是1的数组:", np_e)
执行结果:
4、np.zeros()
创建指定形状的数组,数组元素以 0 来填充
示例:
np_f = np.zeros((2, 5), dtype=int) print("生成全是0的数组:", np_f)
执行结果:
5、np.empty 函数返回一个具有指定形状和数据类型的未初始化数组,即数组的元素值取决于内存的状态
参数:
shape 整数或者整数组成的元组 空数组的维度,例如:(2, 3)或者2
dtype 数值类型,可选参数 指定输出数组的数值类型,例如numpy.int8。默认为numpy.float64。
order {‘C’, ‘F’} 可选参数 是否在内存中以C或fortran(行或列)顺序存储多维数据
示例:
np_g = np.empty([2, 2], dtype=int) print("生成指定形状的数组:", np_g)
执行结果:
6、numpy.random 创建随机数组
1) numpy.random.random(size=None) 该方法返回[0.0~1.0)之间的随机浮点数
a = np.random.random(size=10) print("使用random创建一维数组:", a) b = np.random.random(size=(2, 3)) # 2行3列的数组 print("创建二维数组:", b) c = np.random.random(size=(2, 3, 4)) # 两个3行4列 print("创建三维的数组:", c)
执行结果:
2)numpy.random.randint(low,high,size) 该方法返回随机整数,如果只有low,返回范围是[0,low),如果有high,返回范围为[low,high)
aa = np.random.randint(11, size=10) print("创建0~10一维随机整数:", aa) bb = np.random.randint(11, size=(2, 3)) # 2行3列 print("创建0~10二维随机整数:", bb) cc = np.random.randint(5, 11, size=(2, 3, 4)) # 2个3行4列 print("创建5~10三维随机整数:", cc)
执行结果:
3) numpy.random.randn(d0,d1...dn) 创建标准正态分布(期望为0,方差为1) :dn表示每个维度
aaa = np.random.randn(3) print("创建一维:", aaa) bbb = np.random.randn(2, 3) print("创建二维:", bbb) ccc = np.random.randn(2, 3, 4) print("创建三维:", ccc)
执行结果:
4) numpy.random.normal(loc,scale,size) 创建指定期望和方差的正态分布:loc:期望,scale:方差
aaaa = np.random.normal(1) print(aaaa) bbbb = np.random.normal(1, 2, 10) print(bbbb)
执行结果:
7、np.linspace 创建等差数列
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
参数:
start:返回样本数据开始点
stop:返回样本数据结束点
num:生成的样本数据量,默认为50
endpoint:True则包含stop;False则不包含stop
retstep:If True, return (samples, step), where step is the spacing between samples.(即如果为True则结果会给出数据间隔)
dtype:输出数组类型
axis:0(默认)或-1
示例:
npl_a = np.linspace(1, 20, 8, endpoint=False, dtype=int) # endpoint=False 不包括100 print("从[1-20)之间的前8个整数等差数列:", npl_a)
执行结果:
8、logspace 创建等比数列
np.logspace(start,stop,num,endpoint,base,dtype)
参数:
start:代表序列的起始值。
stop:代表序列的终止值。
num:生成的序列数个数。
endpoint:布尔类型值,默认是true。如果为true, 'stop'是最后一个样本;否则,它不包括在内。
base:代表序列空间的底数,默认基底为10。
dtype:代表序列数组项的数据类型。
示例
# 以10为基底的等比数列 ab = np.logspace(-5, 5, 11) abc = np.log10(ab) print(ab) print(abc)
执行结果
9、numpy.full(shape, val) 生成指定形状的数值都是val的array
npf = np.full((2, 2), 8) print("生成全是2的数组:", npf)
执行结果:
10、numpy.eye(n) 生成单位矩阵
npe = np.eye(5, dtype=int) print("生成单位数矩:", npe)
执行结果:
11、numpy.ones_like(a) 按数组a的形状和类型生成全1的数组
12、numpy.zeros_like(a) 按数组a的形状和类型生成全0的数组
13、numpy.full_like (a, val) 按数组a的形状和类型生成数值全是val的数组
数组维度变换
obj.reshape(shape)
obj.resize(shape) 跟numpy.reshape()的区别在于resize()没有返回值,直接对原始数组进行修改
obj.swapaxes(ax1, ax2) 将两个维度调换,numpy中的维数从0开始索引,即如果是个二维的array,则维度的索引值为0 1
obj.flatten() 对数组进行降维,从名字也可以看出,就是把数组打平
数组类型转换
obj.astype(new_type)
obj.tolist() 把ndarray转换成list
对象属性
.ndim | 秩,轴的数量或维度数量 |
.shape | 数组的维度,对于矩阵(n,m) |
.size | 数组元素总个数 |
.dtype | 元素类型 |
.itemsize | 每个元素大小,字节为单位 |
.flags | 对象的内存信息 |
.real | ndarray元素的实部 |
.imag | ndarray元素的虚部 |
数学运算
np.sqrt() #开平方根 np.abs() #求模值 np.square() #取平方 np.log() #自然对数 np.log2() #以2为底的对数 np.log10() #以10为底的对数 np.exp() #指数 np.sign() #取符号 np.maximum(a,b) #最大值 np.minimum(a,b) #最小值 np.fmax() #取最大值,返回ndarray np.fmin() #取最小值,返回ndarray np.copysign(a,b) #将b中各元素的符号赋值给数组a的对应元素
统计函数
np.sum(a, axis = None) #求和 np.mean(a, axis = None) #求均值 np.std(a, axis = None) #求标准差 np.average(a, axis = None, weights) #按权重求均值 np.min(a) #最小值 np.max() #最大值 np.argmin() #最小值下标 np.argmax() #最大值下标 np.unravel_index(index, shape) #根据shape将一维下标index转成多维下标 np.median(a) #中值 np.ptp(a) #最大值和最小值的差
拓展
数组定义
单行或单列的数组,称为一维数组
多行多列(含2行2列)的数组是二维数组
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------