首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy优化-C和F_Contiguous矩阵

Numpy优化-C和F_Contiguous矩阵
EN

Stack Overflow用户
提问于 2019-11-28 06:13:39
回答 1查看 65关注 0票数 0

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

结论是,点点C_contiguous矩阵应该更快,并给出了以下结果

代码语言:javascript
复制
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

我也试过了(Python3.7),最后的计算,使用C_contiguous矩阵,一点也不快!

我得到了以下结果

代码语言:javascript
复制
 >>> t1
 0.2102820873260498
 >>> t2
 0.4134488105773926
 >>> t3
 0.28309035301208496

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

他们和我的计算结果之间的差异是从哪里来的?第一种情况下的转置怎么能不降低计算速度呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 07:17:00

我的linux/timeit时间:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59079148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档