1.3 Numpy的算术运算
有两种常用的运算,一种是对应元素相乘,又称为逐元乘法,运算符为np.multiply()或者*;另一种是点积或內积,运算符为np.dot().
1.3.1 对应元素相乘
是指两个矩阵中对应元素相乘,输出与输入矩阵或数组的维度是一致的。
多维数组与多维数组相乘
# 对应元素相乘,又称为逐元乘法
A = np.array([[1, 2], [4, 8]])
B = np.array([[-1, 3], [0, 8]])
mu1 = A * B
print(mu1)
mu2 = np.multiply(A, B)
print(mu2)
与单一数值进行相乘
# 跟单一数值相乘
print(A * 2)
print(B * 10)
print(A / 2)
1.3.2 点积运算
点积运算又称为內积,用np.dot表示
# 点积运算,又称为內积运算,用np.dot
c = np.array([[1, 2], [3, 6]])
d = np.array([[3, 10, 5], [2, 5, 6]])
do = np.dot(c, d)
print(do)
1.4 数组形状改变
在机器学习以及深度学习的任务中,通常需要将处理好的数据以模型能接收的格式输入给模型,这时就需要改变数组的形状了。
1.4.1 更改数组的形状
1.reshape
改变向量的维度(不修改向量本身)
# 改变向量的维度(不修改向量本身)
ve = np.arange(10)
print(ve)
# 将向量维度变为2行5列
print(ve.reshape(2, 5))
# 指定维度时可以只指定行数或者列数,其他用-1代替
print(ve.reshape(5, -1))
print(ve.reshape(-1, 5))
2.resize
改变向量的维度(修改向量本身)
# 用resize修改维度
# 会修改向量本身,指内存中的向量也改变了
ve1 = np.arange(10)
print(ve1)
ve1.resize(2, 5)
print(ve1)
3.T
向量转置
# 向量转置
ve3 = np.arange(12).reshape(3, 4)
print(ve3)
# 讲向量转置成4行3列
print(ve3.T)
4.ravel
向量展平
# ravel 向量展平
ve4 = np.arange(6).reshape(2, -1)
print(ve4)
# 按照列优先展平
print(ve4.ravel("F"))
# 按照行优先展平
print(ve4.ravel())
5.flatten
把矩阵转换为向量
# flatten,把矩阵转换为向量
# np.floors是元素向下取整
mt = np.floor(10 * np.random.random((3, 4)))
print(mt)
print(mt.flatten())
6.squeeze
主要用来降低纬度,把矩阵中维度为1的去掉
# squeeze,对多维数组进行降维,把矩阵中维度为1的删掉
mt2 = np.arange(3).reshape(3, 1)
print(mt2)
print(mt2.squeeze())
mt3 = np.arange(6).reshape(3, 1, 2, 1)
print(mt3)
print(mt3.squeeze())
7.transpose
对高纬度矩阵进行轴对换
# transpose,对高维矩阵进行轴对换
mt4 = np.arange(24).reshape(2, 3, 4)
print(mt4)
print(mt4.transpose(1, 2, 0))
1.4.2合并数组
1.append
跟列表里面的追加差不多
# append,合并一维数组,在末尾追加
# 待合并的数组必须有相同的行数和列数
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.append(a, b)
print(c)
# 合并多维数组
a1 = np.arange(4).reshape(2, 2)
a2 = np.arange(4).reshape(2, 2)
print(a1,a2)
# 按行合并
c1 = np.append(a1, a2, axis=0)
print(c1, c1.shape)
# 按列合并
c2 = np.append(a1, a2, axis=1)
print(c2, c2.shape)
2.concatenate
沿指定轴连接数组或矩阵
# concatenate,沿指定轴连接数组或矩阵
a3 = np.array([[1, 2], [3, 4]])
a4 = np.array([[5, 6]])
print(a4.shape)
# 按行
c3 = np.concatenate((a3, a4), axis=0)
print(c3, c3.shape)
# 按列
c4 = np.concatenate((a3, a4.T), axis=1)
print(c4, c4.shape)
3.stack
沿指定轴堆叠数组或矩阵
a5 = np.array([[1, 2], [3, 4]])
a6 = np.array([[5, 6], [7, 8]])
print(np.stack((a5, a6), axis=0), np.stack((a5, a6), axis=0).shape)