简短的问题 - 这是使用Python和NumPy创建一个16x16(或nxn)零矩阵的最快方法吗?
a = np.matrix(np.zeros((16, 16), dtype = np.int))
加快创建此矩阵的最佳方法是完全跳过使用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)
注意 不再建议使用此类,即使是进行线性代数。而是使用常规数组。该类可能在将来被删除。
编辑:在评论中,Paul Panzer提供了有关matrix
弃用原因的讨论。
人们之所以使用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]]
matrix
直接使用这个:a = np.zeros((16, 16))
np.matrix
而不是np.ndarray
? - hilberts_drinking_problem