2

在我的算法上使用Run & Time我发现将标准差添加到整数有点慢。首先,我创建了大整数矩阵:

NumeroCestelli = 5;

lover_bound = 0;
upper_bound = 250;
steps = 10 ;

Alpha = 0.123

livello = [lover_bound:steps:upper_bound];
L = length(livello);

[PianoSperimentale] = combinator(L,NumeroCestelli,'c','r');
for i=1:L
    PianoSperimentale(PianoSperimentale==i)=livello(i);
end

然后我添加标准偏差(sigma = alpha * mu)和误差(称重),如下所示:

%Standard Deviation
NumeroEsperimenti = size(PianoSperimentale,1);

PesoCestelli = randn(NumeroEsperimenti,NumeroCestelli)*Alfa;
PesoCestelli = PesoCestelli.*PianoSperimentale + PianoSperimentale;
random = randn(NumeroEsperimenti,NumeroCestelli);
PesoCestelli(PesoCestelli<0) = random(PesoCestelli<0).*(Alfa.*PianoSperimentale(PesoCestelli<0) + PianoSperimentale(PesoCestelli<0));

%Error
IncertezzaCella = 0.5*10^(-6);
Incertezza = randn(NumeroEsperimenti,NumeroCestelli)*IncertezzaCella;
PesoIncertezza = PesoCestelli.*Incertezza+PesoCestelli;
PesoIncertezza = (PesoIncertezza<0).*(-PesoIncertezza)+PesoIncertezza;

有更快的方法吗?

4

2 回答 2

1

你计算PesoCestelli<0了很多次。您可以只计算一次并保存价值。您还创建了一组完整的随机数,但只使用其中的一个子集 where PesoCestelli<0。您可以通过仅创建所需数量的随机数来加快速度。

不清楚是什么Alfa,但如果它是一个标量,而不是

Alfa.*PianoSperimentale(PesoCestelli<0) + PianoSperimentale(PesoCestelli<0)

这样做可能会更快

(1+Alfa).*PianoSperimentale(PesoCestelli<0)
于 2013-09-30T12:53:14.590 回答
1

没有足够的信息让我对其进行测试,但我敢打赌,消除您所做的所有重复计算将导致加速。我试图删除其中一些:

PesoCestelli = randn(NumeroEsperimenti,NumeroCestelli)*Alfa;
PesoCestelli = (1+PesoCestelli).*PianoSperimentale;
random = randn(NumeroEsperimenti,NumeroCestelli);
idx = PesoCestelli<0;
PesoCestelli(idx) = random(idx).*(1+Alfa).*PianoSperimentale(idx);

%Error
IncertezzaCella = 0.5*10^(-6);
Incertezza = randn(NumeroEsperimenti,NumeroCestelli)*IncertezzaCella;
PesoIncertezza = abs((1+PesoCestelli).*Incertezza);

请注意,我将最后两行缩减为一行。

于 2013-09-30T13:27:19.320 回答