Numpy(Numerical Python 的简称)式高性能科学计算和数据分析的基础包,提供了矩阵运算的功能。Numpy提供的主要功能如下:
- ndarray----一个具有向量算术运算和复杂广播能力的多维数组对象
- 对数组进行快速运算的标准数学函数
- 读写磁盘数据的工具以及用于操作内存映射文件的工具
- 非常有用的线性代数,傅里叶变换和随机数操作
- 集成C/C++和Fortran代码的工具
注:上面提到的“广播”意为当两个不同维度的数组进行运算的时候,可以将低维的数组复制成高维数组参与运算。
下面是在常用于矩阵计算的numpy方法:
(向量:vector,二维数组:matrix)
其中np是import numpy as np , lg是import numpy.linalg as lg
1.创建指定一维数组:
vector = np.array([1,2,3,4])
//控制台结果
[1,2,3,4]
2.创建指定二维数组:
matrix = np.array([
[1,'Tim'],
[2,'Joey'],
[3,'Frank']
])
//控制台结果
[['1' 'Tim']
['2' 'Joey']
['3' 'Frank']]
3.np.zeros() :都为0的矩阵,可以用shape=(a,b)指定矩阵的大小,dtype=int指定数据的类型,默认为float64
1.array = np.zeros(10)
//控制台结果
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
2.array = np.zeros(10,dtype=int)
//控制台结果
[0 0 0 0 0 0 0 0 0 0]
3.array = np.zeros(shape=(3,4))
//控制台结果
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
4.array = np.zeros(shape=(3,4),dtype=int)
//控制台结果
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
4.np.ones() : 都为1的矩阵
array = np.ones(shape=(3,4))
//控制台结果
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
5.np.arange(0,20,2) :0为起始位,20为末位,左闭右开,2为步长
array = np.arange(0,20,2)
//控制台结果
[ 0 2 4 6 8 10 12 14 16 18]
6.np.linspace(0,10,5):分割矩阵
array = np.linspace(0,10,5)
//控制台结果
[ 0. 2.5 5. 7.5 10. ]
7.np.random
1.array = np.random.randint(0,10,10)
//控制台结果
[6 7 1 0 8 1 9 0 2 3]
2. array = np.random.randint(0,5,size=5)
//控制台结果
[3 1 0 2 2]
3.array = np.random.randint(4,9,size=(3,5))
//控制台结果
[[8 8 6 4 6]
[5 5 4 8 5]
[4 7 8 8 4]]
8.np.random.random():生成0~1之间的浮点数
1.array = np.random.random(6)
//控制台结果
[0.37403992 0.92180203 0.09131969 0.45960006 0.22629826 0.42614563]
2.array = np.random.random((2,4))
//控制台结果
[[0.23355572 0.78107586 0.8661805 0.31109417]
[0.42339225 0.41739485 0.58668124 0.34782551]]
9.np.random.normal():表示的是一个正态分布,loc为正态分布的均值,scale为正态分布的标准差,size为大小
array = np.random.normal(loc=0,scale=1,size=(3,5))
//控制台结果
[[ 0.43657947 -1.39794193 0.1179223 -0.64183996 -0.29130984]
[-1.33134218 0.80834521 0.58188407 0.1426738 -0.00915782]
[-0.68626023 -1.80214324 -0.7342059 0.10136166 0.77105925]]
10.np.random.shuffle(array):随机打乱矩阵中的元素
array = np.array([
[1,2,3],
[4,5,6]
])
np.random.shuffle(array)
print(array)
//控制台结果
[[4 5 6]
[1 2 3]]
11.np.arange().reshape()
array = np.arange(6).reshape(2,3)
//控制台结果
[[0 1 2]
[3 4 5]]
12.array.shape:获得当前数组array的行数和列数
array = np.array([
[0,1,2],
[3,4,5]
])
//控制台结果
(2, 3)
13.Numpy的切片操作:其中结果1表示,选择所有的行,而列的索引是1的数据,因此结果为10,25,40,结果3表示为选择所有的列,且行的索引是1和2的数据
import numpy as np
matrix = np.array([
[5,10,15],
[20,25,30],
[35,40,45]
])
print("结果1:")
print(matrix[:,1])
print("结果2:")
print(matrix[:,0:2])
print("结果3:")
print(matrix[1:3,:])
print("结果4:")
print(matrix[1:3,0:2])
//控制台结果
结果1:
[10 25 40]
结果2:
[[ 5 10]
[20 25]
[35 40]]
结果3:
[[20 25 30]
[35 40 45]]
结果4:
[[20 25]
[35 40]]
14.np.eye():生成主对角线为1的矩阵
array = np.eye(4)
//控制台结果
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
15.np.shin(a):对矩阵a中的每个元素去正弦,即sin(x)
16.np.cos(a):对矩阵a中的每个元素去余弦,即cos(x)
17.np.tan(a):对矩阵a中的每个元素去正切,即tan(x)
18.np.sqrt(a):对矩阵a中的每个元素开根号
19.np.abs(a):对矩阵a中每个元素取绝对值
20.array1.dot(array2):矩阵点乘函数,原理是array1的第一行[1,2,3]与array2的第一列[1,3,5]相乘再相加,对应第二行和第二列相乘再相加,以此类推
import numpy as np
array1 = np.array([
[1,2,3],
[4,5,6]
])
array2 = np.array([
[1,2],
[3,4],
[5,6]
])
print(array1.dot(array2))
//控制台结果
[[22 28]
[49 64]]
21.array.T:矩阵转置
array = np.array([
[1,2,3],
[4,5,6]
])
print(array.T)
//控制台结果
[[1 4]
[2 5]
[3 6]]
22.lg.inv(array):矩阵的逆
import numpy as np
import numpy.linalg as lg
array = np.array([
[0,1],
[2,3]
])
invA = lg.inv(array)
print(invA)
//控制台结果
[[-1.5 0.5]
[ 1. 0. ]]
23.array.astype(float):转换矩阵的类型
array = np.array(["1","2","3"])
array = array.astype(float)
print(array)
//控制台结果
[1. 2. 3.]
24.array.sum():计算矩阵元素的和,矩阵的计算结果为一个一维数组,需要指定行或者列
25.array.mean():计算矩阵元素的平均值,矩阵的计算结果为一个一维数组,需要指定行或者列
26.array.max():计算矩阵元素的最大值,矩阵的计算结果为一个一维数组,需要指定行或者列
27.array.median:计算矩阵元素的中位数
28.np.argmax([1,2,6,3,2]):求array种最大值的下标
29.np.argmin([1,2,6,3,2]):求array种最小值的下标
30.返回多个指定下标的元素
1.x = np.arange(15)
ind = [3,5,8]
print(x[ind])
//控制台结果
[3 5 8]
2.x = np.arange(10)
np.random.shuffle(x)
ind = np.array([
[0,2],
[1,3]
])
print(x)
print(x[ind])
//控制台结果
[9 4 8 7 0 3 6 5 1 2]
[[9 8]
[4 7]]