【发布时间】:2014-05-16 20:25:04
【问题描述】:
我正在慢慢切换到 Python,我想做一个简单的测试来比较简单数组求和的性能。我生成一个随机的 1000x1000 数组,并将该数组中的每个值加一。
这是我的 Python 脚本:
import time
import numpy
from numpy.random import random
def testAddOne(data):
"""
Test addOne
"""
return data + 1
i = 1000
data = random((i,i))
start = time.clock()
for x in xrange(1000):
testAddOne(data)
stop = time.clock()
print stop - start
还有我在 MATLAB 中的函数:
function test
%parameter declaration
c=rand(1000);
tic
for t = 1:1000
testAddOne(c);
end
fprintf('Structure: \n')
toc
end
function testAddOne(c)
c = c + 1;
end
Python 需要 2.77 - 2.79 秒,与 MATLAB 函数相同(实际上我对 Numpy 印象深刻!)。我必须对我的 Python 脚本进行哪些更改才能使用多线程?因为我没有工具箱,所以我不能在 MATLAB 中。
【问题讨论】:
-
在
MATLAB上真的公平吗?一次添加一个元素,你可以一口气完成,因为这就是 MATLAB 的强大之处?如果您使用inline功能,如果您使用MATLAB获得一些明显的改进,我不会感到惊讶。 -
@Divakar 您应该再次检查代码,MATLAB 正在一次调用中添加这些代码。可能误导你的是我运行了 1000 次,这也对应于数组的长度。为了理解,for循环
t = 1:1000可以是t = 1:randi([1000,2000]) -
没错,这就是为什么我的函数使用 MATLAB 向量化方法的原因。如果我不这样做,我将不得不使用两个 for 循环语句 i 和 j 并遍历每个索引以添加一个。就像你说的那样,不会使用 MATLAB 的强大功能。
-
看起来比较公平。
标签: python arrays multithreading matlab numpy