小编rap*_*ppr的帖子

MATLAB比Python更快(简单的小实验)

我读过这个(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一样快? …

python matlab performance-testing

5
推荐指数
1
解决办法
850
查看次数

数组每列中的唯一元素(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)

arrays matlab element unique vectorization

1
推荐指数
1
解决办法
951
查看次数