python 中的向量格式与运算
文章目录
- python 中的向量格式与运算
- 1. 矩阵中的向量
- 2. 利用普通向量对矩阵进行填补
python 中的向量有两种形式, 一种是矩阵形式的向量; 另一种是普通的向量. 这两种形式的向量虽然看似相同, 但是在存储、赋值或者运算时都有着本质的区别.
import numpy as np
x = np.array([1,2,3,4])
y = np.array([[1,2,3,4]])
print('普通向量{}的形状为:{}\n'.format(x,x.shape))
print('普通向量{}的形状为:{}\n'.format(y,y.shape))
'''
普通向量[1 2 3 4]的形状为:(4,)
普通向量[[1 2 3 4]]的形状为:(1, 4)
'''
1. 矩阵中的向量
python 中的向量和矩阵中的向量有所不同. 矩阵中的向量分为行向量或列向量, 以矩阵形式进行存储, 其格式为 或 . 由于矩阵格式的向量可以参与矩阵乘法运算, 但是无法给矩阵单个列进行赋值. (对单个行是可以整体赋值).
import numpy as np
y = np.array([[1,2,3,4]])
One = np.ones((4,4))
c = One@y.T
print('A*y.T的结果为:\n{}\n\n A*y.T的形状为:{}\n'.format(c,c.shape))
'''
A*y.T的结果为:
[[10.]
[10.]
[10.]
[10.]]
A*y.T的形状为:(4, 1)
'''
One[1,:]=y
print('矩阵第2行被替代后的结果为:\n{}\n'.format(One))
'''
矩阵第2行被替代后的结果为:
[[1. 1. 1. 1.]
[1. 2. 3. 4.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
'''
One[:,2]=y.T # 矩阵进行列替代的时候出现了报错, 修改为 y.reshape(-1,)报错消失
print(One)
print('普通向量{}的形状为:{}\n'.format(y,y.shape))
'''
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Input In [25], in <cell line: 8>()
6 One[1,:]=y
7 print('矩阵第2行被替代后的结果为:\n{}\n'.format(One))
----> 8 One[:,2]=y.T # 矩阵进行列替代的时候出现了报错, 修改为 y.reshape(-1,)报错消失
9 print(One)
10 print('普通向量{}的形状为:{}\n'.format(y,y.shape))
ValueError: could not broadcast input array from shape (4,1) into shape (4,)
'''
解决此问题达到利用矩阵的列替换原有矩阵列效果的做法可以将列索引设置成列表
import numpy as np
y = np.array([[1,2,3,4]])
One = np.ones((4,4))
Zero = np.zeros((4,1))
One[:,[1]]=Zero # 将列标号设置成列表的形式
print(One)
2. 利用普通向量对矩阵进行填补
python 中的普通向量没有行向量或者列向量之分, 其形状均为 . 这种格式无法参与矩阵的乘法, 需要利用 reshape(-1,1) 先转化成矩阵型向量. 其最大的优势就是可以直接赋值到矩阵特定的列.
import numpy as np
x = np.array([1,2,3,4])
One = np.ones((4,4))
print('向量 x 的形状为: {}\n'.format(x.shape))
One[:,2]=x.T # 矩阵进行列替代的时候出现了报错, 修改为 y.reshape(-1,)报错消失
print('替换后的矩阵为:\n {}'.format(One))