python 性能并不慢_为什么MATLAB/Numpy/Scipy性能很慢并且达不到CPU能力(flops)?

首先,我知道有多个线程涉及这个问题,但是我不能得到一个直接的答案,并遇到了一些失败的计算错误。在

我准备了一个MATLAB和Python的元素乘法基准测试。这是一种最简单、最前沿的方法,可以很容易地计算flop计数。在

它使用NxN数组(matrix),但不执行矩阵乘法,而是按元素进行乘法。这一点很重要,因为当使用矩阵乘法时,运算数不是N^3!!!在

然而,随机生成的数的元素乘法运算必须在N^2次运算中执行

我有一个intel i7-4770(我想它有4个物理核和8个虚拟核)@3.5GHz。所以如果假设每个周期有4次浮点运算,那么每个核心应该是14次浮点运算!在

MATLAB/Numpy/Scipy别靠近它。在

为什么?在

MATLAB软件:%element wise multiplication benchmark

N = 10^4;

nOps = N^2;

m1 = randn(N);

m2 = randn(size(m1));

m = randn(size(m1));

m1 = single(m1);

m2 = single(m2);

% clear m

tic

m1 = m1 .* m2;

t = toc;

gflops = nOps/t*1e-9;

t_gflops = [t gflops]

% clear m

tic

m1 = m1.*m2;

t = toc;

gflops = nOps/t*1e-9;

t_gflops = [t gflops]

% clear m

tic

m1 = m1.*m2;

t = toc;

gflops = nOps/t*1e-9;

t_gflops = [t gflops]

version('-blas')

version('-lapack')

结果是:

^{pr2}$

现在Python:import numpy as np

# import gnumpy as gnp

import scipy as sp

import scipy.linalg as la

import time

if __name__ == '__main__':

N = 10**4

nOps = N**2

a = np.random.randn(N,N).astype(np.float32)

b = np.random.randn(N,N).astype(np.float32)

t = time.time()

c = a*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值