加快创建此矩阵的最佳方法是完全跳过使用matrix 类,而只使用np.zeros:
a = np.zeros((16, 16))
跳过matrix 的使用可以提高 10 倍的速度:
%%timeit
a = np.matrix(np.zeros((16, 16)))
4.95 µs ± 50.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
a = np.zeros((16, 16))
495 ns ± 2.18 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
numpy.matrix has been deprecated:
注意
不再推荐使用这个类,即使是线性代数。而是使用常规数组。将来可能会删除该类。
编辑:在 cmets 中有一个很好的 discussion about the reasons behind matrix's deprecation 与 Paul Panzer 相关联。
人们使用matrix 而不是array 的一个常见原因是a * b 将执行矩阵乘法(而不是像标准array 那样的成对乘法)。但是,您现在可以使用闪亮的新矩阵乘法运算符@ 轻松地使用标准数组执行矩阵乘法:
a = np.arange(2*2).reshape(2,2)
b = np.arange(2*2, 2*2*2).reshape(2,2)
print('a\n%s\n' % a)
print('b\n%s\n' % b)
print('a * b (pairwise multiplication)\n%s\n' % (a * b))
print('a @ b (matrix multiplication)\n%s\n' % (a @ b))
输出:
a
[[0 1]
[2 3]]
b
[[4 5]
[6 7]]
a * b (pairwise multiplication)
[[ 0 5]
[12 21]]
a @ b (matrix multiplication)
[[ 6 7]
[26 31]]