吴恩达大佬在深度学习课程里讲的很多Python技巧还是很受用的。
有的看似是向量的东西其实不是向量,而是一种秩为1的奇怪的东西:
import numpy as np
aa=np.array([1,2,3])
print(aa)
print(aa.shape)
print(aa.T)
print(aa.T.shape)
print(np.dot(aa,aa.T))
print(np.dot(aa.T,aa))
Output:
[1 2 3] (3,) [1 2 3] (3,) 14 14
可以看到即使做转置操作也和原来完全一样。
这样写才是真正的向量:
bb=np.array([[1],[2],[3]])
print(bb)
print(bb.shape)
print(bb.T)
print(bb.T.shape)
print(np.dot(bb,bb.T))
print(np.dot(bb.T,bb))
Output:
[[1] [2] [3]] (3, 1) [[1 2 3]] (1, 3) [[1 2 3] [2 4 6] [3 6 9]] [[14]]
这样就完全体现出了向量该有的特性。
a=np.random.randn(5) # 不要这么写!
b=np.random.randn(5,1) # 要这样写
用assert检查向量的格式:
assert aa.shape==(3,)
正常运行。
assert aa.shape==(3,1)
报错:
AssertionError Traceback (most recent call last) <ipython-input-30-78c5b7bd4e75> in <module> ----> 1 assert aa.shape==(3,1) AssertionError:
转换成正确的格式:
aa=aa.reshape(3,1)
print(aa)
Output:
[[1] [2] [3]]