为了进行基准比较,我考虑简单的功能:
function dealiasing2d(where_dealiased, data)
[n1, n0, nk] = size(data);
for i0=1:n0
for i1=1:n1
if where_dealiased(i1, i0)
data(i1, i0, :) = 0.;
end
end
end
它在伪光谱模拟(数据是一个3d复数数组)中很有用,但基本上它将掩码应用于一组图像,将其中where_dealiased为true的元素置零.
我将在这种简单情况下比较不同语言(以及实现,编译器等)的性能.对于Matlab,我将函数的计时时间定为timeit.由于我不想在Matlab中对我的无知进行基准测试,因此我想用这种语言真正优化此函数.在Matlab中最快的方法是什么?
我现在使用的简单解决方案是:
function dealiasing2d(where_dealiased, data)
[n1, n0, nk] = size(data);
N = n0*n1;
ind_zeros = find(reshape(where_dealiased, 1, []));
for ik=1:nk
data(ind_zeros + N*(ik-1)) = 0;
end
我怀疑这不是正确的方法,因为等效的Numpy解决方案的速度大约快10倍.
import numpy as np
def dealiasing(where, data):
nk = data.shape[0]
N = reduce(lam