1. numpy科学计算基础库
1.1 什么是numpy
NumPy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy的前身Numeric最早是由Jim Hugunin与其它协作者共同开发,2005 年,Travis Oliphant在Numeric中结合了另一个同性质的程序库Numarray的特色,并加入了其它扩展而开发了NumPy。NumPy为开放源代码并且由许多协作者共同维护开发。
NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
1.2 创建数组(矩阵)
# coding=utf-8 import numpy as np #使用numpy生成数组,得到ndarray的类型 t1 = np.array([1,2,3,]) print(t1) print(type(t1)) t2 = np.array(range(10)) print(t2) print(type(t2)) t3 = np.arange(4,10,2) print(t3) print(type(t3)) print(t3.dtype)
运行结果
1.3 数据类型
名称 | 描述 |
---|---|
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
# coding=utf-8 import numpy as np import random # int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替 t1 = np.array(range(1,4),dtype="i1") print(t1) print(t1.dtype) ##numpy中的bool类型 t2 = np.array([1,1,0,1,0,0],dtype=bool) print(t2) print(t2.dtype) #调整数据类型 t3 = t2.astype("int8") print(t3) print(t3.dtype) #numpy中的小数 t4 = np.array([random.random() for i in range(10)]) print(t4) print(t4.dtype) t5 = np.round(t4,2) print(t5)
运行结果:
1.4 数组的形状
# coding=utf-8 import numpy as np a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]]) print(a) #查看数组形状 print(a.shape) #修改数组形状 print(a.reshape(3,4)) #原数组形状不变 print(a.shape) b = a.reshape(3,4) print(b.shape) print(b) #把数组转化为1维度数据 print(b.reshape(1,12)) print(b.flatten())
运行结果:
1.5 数组和数的计算
# coding=utf-8 import numpy as np a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]]) print(a) #加法减法 print(a+5) print(a-5) #乘法除法 print(a*3) print(a/3)
运行结果:
1.6 数组和数组的计算
# coding=utf-8 import numpy as np a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]]) b = np.array([[21,22,23,24,25,26],[27,28,29,30,31,32]]) #数组和数组的加减法 print(a+b) print(a-b) #数组和数组的乘除法 print(a*b) print(a/b)
运行结果:
不同维度数组的计算:
# coding=utf-8 import numpy as np a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]]) c = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) #不同维度的数组计算 print(a*c)
运行结果:
# coding=utf-8 import numpy as np #2行6列的数组 a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]]) #1行6列的数组 c = np.array([1,2,3,4,5,6]) print(a-c) print(a*c)
运行结果:
# coding=utf-8 import numpy as np #2行6列的数组 a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]]) #1行6列的数组 c = np.array([[1],[2]]) print(a+c) print(a*c) print(c*a)
运行结果: