我读过这个(MATLAB比Python更快吗?),我发现它有很多ifs.
我在仍在Windows XP上运行的旧计算机上尝试过这个小实验.
在MATLAB R2010b中,我在命令窗口中复制并粘贴了以下代码:
tic
x = 0.23;
for i = 1:100000000
x = 4 * x * (1 - x);
end
toc
x
Run Code Online (Sandbox Code Playgroud)
结果是:
Elapsed time is 0.603583 seconds.
x =
0.947347510922557
Run Code Online (Sandbox Code Playgroud)
然后我py用以下脚本保存了一个文件:
import time
t = time.time()
x = 0.23
for i in range(100000000): x = 4 * x * (1 - x)
elapsed = time.time() - t
print(elapsed)
print(x)
Run Code Online (Sandbox Code Playgroud)
我按下F5了,结果是
49.78125
0.9473475109225565
Run Code Online (Sandbox Code Playgroud)
在MATLAB中耗时0.60秒; 在Python中花了49.78秒(永恒!!).
所以问题是:有没有一种简单的方法让Python像MATLAB一样快?
具体来说:如何更改py脚本以使其运行速度与MATLAB一样快? …
我可能对Matlab有点生疏,也许这个问题的答案比我现在想象的更微不足道.但是我在网上搜索了有效的解决方案而我还没有找到,所以我会在这里试试.
我有一个大矩阵,类似于y:
N = 1e6; k = 20; n = 100;
y = ceil(n * rand(k, N));
Run Code Online (Sandbox Code Playgroud)
对于数组的每一列,我想计算唯一元素的数量.循环非常慢:
tic
r = zeros(N, 1);
for ii = 1:N
r(ii) = numel(unique(y(:, ii)));
end
toc
Run Code Online (Sandbox Code Playgroud)
寻找矢量化,更快的版本.
大卫的回答似乎也是正确而快速的.谢谢!
N = 1e6; k = 20; n = 100;
y = ceil(n * rand(k, N));
tic
r1 = zeros(N, 1);
for ii = 1:N
r1(ii) = numel(unique(y(:, ii)));
end
toc
tic
r2 = sum(diff(sort(y)) ~= 0) + 1;
toc
all(r1' == r2)
Run Code Online (Sandbox Code Playgroud)