矩阵的运算
import numpy as np
A = np.array([[56.0, 0.0, 4.4, 68.0],
[1.2, 104.0, 52.0, 8.0],
[1.8, 135.0, 99.0, 0.9]])
print(A)
print()
cal = A.sum(axis=0)
print(cal)
print()
cal1 = A.sum(axis=1)
print(cal1)
print()
percentage = 100*A/cal.reshape(1, 4)
print(percentage)
运行结果为:
[[ 56. 0. 4.4 68. ]
[ 1.2 104. 52. 8. ]
[ 1.8 135. 99. 0.9]]
[ 59. 239. 155.4 76.9]
[128.4 165.2 236.7]
[[94.91525424 0. 2.83140283 88.42652796]
[ 2.03389831 43.51464435 33.46203346 10.40312094]
[ 3.05084746 56.48535565 63.70656371 1.17035111]]
- 注:
- A.sum(axis=0) 中 axis = 0 的时候是列求和,axis = 1 的时候是行求和
- cal.reshape(1, 4) 中的reshape用来确保是矩阵的维度, 也可以直接用 A/cal。 reshape消耗常量的时间,时间复杂度是O(1),调用成本很低,所以完全不用担心会消耗大量的时间。
- A 是一个 3 *4 的矩阵,而 cal 是一个1 *4的矩阵,两个矩阵怎么相除呢?
[ 59. 239. 155.4 76.9] --- > [[ 59. 239. 155.4 76.9]
[ 59. 239. 155.4 76.9]
[ 59. 239. 155.4 76.9]]
- Python会将后者进行复制,复制了2次,变成了 3 *4的矩阵,就可以按位相除了。
- 对于 Python 中两个矩阵的 + - * / 都是这样的运算规则:假如 A 矩阵是 m * n 的,B矩阵是 1 * n 的(或者n * 1),Python会将后者复制成 m * n 的矩阵,然后再按位进行运算。
- (这属于Python broadcasting的功能,感兴趣的可以看 numpy 文档)
np.random.randn(5)
import numpy as np
# 生成五个高斯随机数,并存储在数组A中
A = np.random.randn(5)
print(A)
print(A.shape)
print(A.T)
print(np.dot(A, A.T))
运行结果
[ 0.25158475 2.07597532 -1.29149311 0.97915037 0.81086473]
(5,)
[ 0.25158475 2.07597532 -1.29149311 0.97915037 0.81086473]
7.657159909896855
- 注:
- A是一个一维数组
- 输出结果 (5,) ,这在Python 中代表秩为 1 的数组,A既不是行向量,也不是列向量
- 如果 A 是列向量或者是行向量,则 np.doc(A, A.T) 得到的就是一个矩阵
np.random.randn(5, 1)
import numpy as np
# 生成 5 * 1 的列向量
A = np.random.randn(5, 1)
print(A)
print()
print(A.shape)
print(A.T)
print()
print(np.dot(A, A.T))
运行结果:
[[-1.07495378]
[ 1.03389999]
[-1.43629909]
[-1.50198387]
[ 3.10399316]]
(5, 1)
[[-1.07495378 1.03389999 -1.43629909 -1.50198387 3.10399316]]
[[ 1.15552562 -1.11139469 1.54395514 1.61456323 -3.33664916]
[-1.11139469 1.06894918 -1.48498961 -1.5529011 3.20921848]
[ 1.54395514 -1.48498961 2.06295509 2.15729807 -4.45826256]
[ 1.61456323 -1.5529011 2.15729807 2.25595555 -4.66214765]
[-3.33664916 3.20921848 -4.45826256 -4.66214765 9.63477351]]
- 注
- A 是一个 5 * 1 的列向量,是一个矩阵