整数优化-C和F_连续矩阵

问题描述 投票:0回答:1

我对http://scipy.github.io/old-wiki/pages/PerformanceTips中有关如何获得更快的点计算的讨论很感兴趣。

结论是点C_连续矩阵应该更快,并给出以下结果

import numpy as np
from time import time
N = 1000000
n = 40
A = np.ones((N,n))

AT_F = np.ones((n,N), order='F')
AT_C = np.ones((n,N), order='C')
>>> t = time();C = np.dot(A.T, A);t1 = time() - t
3.9203271865844727
>>> t = time();C = np.dot(AT_F, A);t2 = time() - t
3.9461679458618164
>>> t = time();C = np.dot(AT_C, A);t3 = time() - t
2.4167969226837158

我也尝试过(Python 3.7),使用C_contiguous矩阵的最终计算根本不快!

我得到以下结果

 >>> t1
 0.2102820873260498
 >>> t2
 0.4134488105773926
 >>> t3
 0.28309035301208496

事实证明,第一种方法是最快的。

他们的计算与我的计算之间的差异来自何处?在第一种情况下如何转置不会减慢计算速度?

谢谢

python numpy linear-algebra blas
1个回答
1
投票

我的linux / timetime:

In [122]: timeit A.T@A                                                          
258 ms ± 523 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [123]: timeit AT_F@A                                                         
402 ms ± 2.66 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [124]: timeit AT_C@A                                                         
392 ms ± 9.16 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [125]: %%timeit x=A.T.copy(order='F') 
     ...: x@A                                                                       
410 ms ± 18.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
© www.soinside.com 2019 - 2024. All rights reserved.