Numpy 八度矩阵乘法的速度

Numpy 八度矩阵乘法的速度,numpy,matrix,octave,Numpy,Matrix,Octave,我很好奇Octave 3.8.2的矩阵乘法有多快,所以我使用以下代码对两个5000X5000矩阵的乘法计时: X = rand(5000,5000); Y = rand(5000,5000); BEFORE = time(); Z = X*Y; AFTER = time(); disp(AFTER - BEFORE); 结果平均约为1分钟。使用几乎相同的代码,我用Python对numpy矩阵进行了相同的计算。大约花了7.5秒 我对这些结果感到惊讶,因为我觉得倍频程对于矩阵计算是高度优化的。我的

我很好奇Octave 3.8.2的矩阵乘法有多快,所以我使用以下代码对两个5000X5000矩阵的乘法计时:

X = rand(5000,5000);
Y = rand(5000,5000);
BEFORE = time();
Z = X*Y;
AFTER = time();
disp(AFTER - BEFORE);
结果平均约为1分钟。使用几乎相同的代码,我用Python对numpy矩阵进行了相同的计算。大约花了7.5秒

我对这些结果感到惊讶,因为我觉得倍频程对于矩阵计算是高度优化的。我的结果是典型的吗?当涉及到大规模矩阵计算时,人们通常更喜欢Python而不是倍频程吗

编辑:这是numpy代码

X = numpy.matrix(numpy.random.rand(5000,5000))
Y = numpy.matrix(numpy.random.rand(5000,5000))
BEFORE = time.process_time()
Z = X*Y;
AFTER = time.process_time()
print(AFTER - BEFORE)

我无法重现如此糟糕的结果

timesum = 0
maxtime = 0
mintime = 100
for n = 1:100
  x = rand(5000,5000);
  y = rand(5000,5000);
  tic
  Z = x*y;
  tmptime = toc;
  timesum += tmptime;
  maxtime = max(maxtime, tmptime);
  mintime = min(mintime, tmptime);  
end
disp("meantime")
disp(timesum/100)
disp("maxtime")
disp(maxtime)
disp("mintime")
disp(mintime)


octave:1> test1
timesum =                    0
maxtime =                    0
mintime =                  100
meantime
    4.34704959154129
maxtime
      5.297199010849
mintime
    4.09799385070801
octave:2> 
Haswell i5手机上的倍频程4.0.0

用Matlab计算的结果基本相同

meantime
    4.0443

maxtime
    5.5522

mintime
    3.9679

这并不奇怪。他们或多或少都在使用相同的库。

向我们展示您的
numpy
代码。不知道为什么没有它会有巨大的时间差是不可能的。顺便说一句,我在MATLAB中运行了这段代码,运行时间为3.32秒。我用了
tic/toc
。我的配置是Mac OS 10.10.5中的MATLAB R2013a,内存为16 GB。这还取决于您用于编译NumPy的编译器(它是隐藏的C和Fortran代码)以及用于blas/lapack/atlasI的编译器。我相信我使用的是Cython。我刚刚下载了Anaconda3,所以我正在使用它附带的任何东西。在Ubuntu14.04 LTS中打包了octave,在一台8核i7-4800MQ CPU@2.70GHz(以及足够的RAM)的机器上需要17秒。对于python,它使用了一个独特的核心(默认行为),花费了五分钟多。。。