Странная проблема остатка в Matlab - PullRequest
1 голос
/ 01 сентября 2010
for i=1:length(wav)
    if (rem(i,6) ~= 0)
        wav(i) = 0;
    end
end

6-е значение в векторе будет установлено в 0 (неверно), но все кратные 6 останутся (что верно).Странно, это работает правильно, если бы я должен был сделать это rem (i, 7) или rem (i, 4).Это ошибка точности станка?Если да, то как мне исправить это?

1 Ответ

3 голосов
/ 01 сентября 2010

Я не могу воспроизвести это на MATLAB r2010a

wav = 1:12;
for i=1:length(wav)
   if (rem(i,6) ~= 0)
       wav(i) = 0;
   end
end
wav

производит

wav = 0 0 0 0 0 6 0 0 0 0 0 12

в любом случае, этот код обязательно работает и лучше MATLAB

wav(rem(1:length(wav), 6) ~= 0) = 0;

или (вероятно, быстрее, но может использовать больше памяти, в зависимости от оптимизации matlab)

wav2 = zeros(size(wav));
wav2(6:6:end) = wav(6:6:end);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...