一、numpy简介(numerical python)
numpy包含:一个强大的n维数组对象ndarray、强大的广播功能、线性代数、随机数生成
二、一维数组
1. np.array()
n维数组对象ndarray: 一系列同类型的数据集合,0开始索引
import numpy as np
values = [1,2,3,4]
C = np.array(values)
print(C) # 注意:array没有逗号,list有逗号
np.array可以当作整体处理,避免使用for循环
print(C*9/5+32)
2. np.arange()
# np.arange([start,]stop[,step],[dtype = None])
np.arange(1,10)
# start默认为0,stop取不到
3. np.linspace()
语法:注意默认可以取到stop
np.linspace(
start,
stop,
num=50,
endpoint=True,
retstep=False, # retstep返回相邻值差额
dtype=None,
axis=0,
)
x = np.linspace(0.5, 25, 10) # 默认可以取到start与stop
x
4. 返回向量组的类型与维数
V = np.linspace(1,20,20, endpoint = True)
print(V.dtype) # 数组属性(不需要括号)
print(V.shape)
print(np.ndim(V))
5. [:, np.newaxis]将一维数组转化为列向量
arr = np.array([1, 2, 3, 4, 5]) # 一维数组
print(arr.shape) # 输出 (5,)
# 将一维数组转换为列向量
arr_column = arr[:, np.newaxis]
print(arr_column)
print(arr_column.shape) # 输出 (5, 1),即5行1列的二维数组
三、二维数组
1. 定义
A = np.array([1,2,3],[4,5,6],[7,8,9])
print(A)
print(A.ndim(A))
2. array.reshape()
np.arange(2,10).reshape(2,4)
3. np.shape(x)或x.shape:返回x的形状
x = np.array([[1,2,3],[3,4,5],[4,5,6]]) # 注意有两个方括号
np.shape(x)
rows, columns = x.shape # 元组解包
四、数组切片
B = np.arange(11,36).reshape(5,5)
print(B)
print(B[:3,2:]) # 注意多维切片的形式
print(B[2:3,:] # 取出第三行
print(B[:,4:] # 取出最后一列
五、零矩阵、一矩阵、单位矩阵、对角、上三角阵
1. 数组创建:np.zeros(size)、np.ones(size)
size = (2,3,4)
np.zeros(size) # 注意:括号内是元组
np.ones(size)
2. np.ones_like(x) np.zeros_like(x):生成与括号中相同维度的数组
x = np.array([[1,2,3],[4,5,6]])
print(np.ones_like(x))
print(np.zeros_like(x))
3. np.eye(N,M=None,k=0,dtype=float):单位阵,k=1表示向右偏移
np.eye(5,8,k=1,dtype = int)
4.np.diagflat(v, k=0):一维输入,二位输出,将一维输入放置于对角线,k表示对角线的位置。
a = np.array([1,2,3])
np.diagflat(a, k=1)
六、对数组形状的改变
1. A.flatten():扁平化处理
A = np.array([[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]])
a = A.flatten()
2. A.reshape(m,n,p) :改变数组形状
x = np.arange(24)
y = x.reshape(2,3,4)
y = np.reshape(np.arange(6),(3,2))
3. np.concatenate((a, b), axis):合并数组
a = np.array([[1,2],[3,4]])
b = np.array([5,6])
np.concatenate((a, b), axis = 0) # axis=0表示在行上进行合并
np.concatenate((a, b.T), axis = 1) # axis=1表示在列上进行合并
np.concatenate((a,b), axis = None) # axis=None表示扁平化处理
4. np.tile(x, (m,n)):数组元素的重复,(m,n)确定重复的维度
x = np.array([[1,2], [3,4]])
np.tile(x, (3,4))
七、数组运算
1. 标量
对数组的操作与对标量操作一致。因此,用numpy库进行运算时,对向量的运算可以避免使用for循环。
x = np.arange(10)
print(x+2)
print(np.sin(x))
print(np.log(x))
2. 数组计算(均值、方差、一阶差分)
x = np.linspace(0,25,10)
np.mean(x)
np.max(x)
np.std(x)
np.diff(x) # 一阶差分
np.reshape(x,(5,2))
2. 加法与乘法:对应位置上元素的运算
A = np.array([[11,12,13],[21,22,23],[31,32,33]])
B = np.ones((3,3))
3. dot运算:一维数组内积,二维数组矩阵乘法
print(np.dot(3,4)) # 简单乘法
x = np.array(3,4)
y = np.array(-3,4)
print(np.dot(x, y)) #向量dot表示内积
A = np.array([[1,2,3],[3,2,1]])
B = np.array([[2,3,4,-2],[1,-1,2,3],[1,2,3,0]])
print(A.shape[-1]==B.shape[-2]) # 判断矩阵相乘的条件
print(np.dot(A,B))
4. 矩阵乘法
A = np.array([[1,1,1],[2,2,2],[3,3,3]])
B = np.array([[1,2,3],[3,4,5],[4,5,6]])
MA = np.mat(A)
MB = np.mat(B)
print(MA*MB)
5. 判断矩阵各个位置的元素是否相等
A = np.array([[11,12,13],[21,22,23],[31,32,33]])
B = np.array([[11,102,13],[201,22,203],[31,32,303]])
A == B
6. 行列式、逆、求解方程组
c = np.arange(16)
np.random.shuffle(c)
c = c.reshape(4,4)
np.linalg.det(c) #计算行列式
np.linalg.inv(c) #求逆
c.T # 转置
A = np.array([[2,4],[6,3]])
b = np.array([4,2])
x = np.linalg.solve(A,b)
7. 广播:自动调整维度
A = np.array([[11,12,13],[21,22,23],[31,32,33]])
B = np.array([1,2,3]
A+B
A*B
8. 花式索引
C = np.array([123,188,190,99,77,88,100])
A = np.array([4,7,2,8,6,9,5])
R = C[A<5]
print(R)