Как я могу написать это эффективно, не используя цикл в Matlab? - PullRequest
2 голосов
/ 28 марта 2012

dist=[1:100]; % distance

% conc. is concentration of size 1x100

conc=1  1   1   1   1   1   1   1   1   1   1   1   1   1   1   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.980000000000000   0.970000000000000   0.950000000000000   0.920000000000000   0.890000000000000   0.850000000000000   0.820000000000000   0.790000000000000   0.750000000000000   0.710000000000000   0.680000000000000   0.640000000000000   0.600000000000000   0.560000000000000   0.520000000000000   0.480000000000000   0.440000000000000   0.400000000000000   0.360000000000000   0.310000000000000   0.270000000000000   0.230000000000000   0.180000000000000   0.140000000000000   0.100000000000000   0.0700000000000000  0.0400000000000000  0.0200000000000000  0.0100000000000000  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

Я хочу найти индекс, соответствующий значению концентрации 0,16 (или максимально возможное значение) и 0,84 (или максимально возможное значение) в conc. Я буду использовать этот индекс, чтобы найти dist по этим индексам. Следует отметить, что значение conc уменьшается от 1 до 0 в нелинейных отношениях в векторе размером 100. Я знаю, что мы можем использовать find(), но я не уверен, как его можно использовать для чего Я хочу сделать.

Я хочу быть в состоянии сделать это эффективно без использования цикла, если это возможно. Это потому, что у меня много векторов для концентрации, и в моем коде уже много циклов. Спасибо.

1 Ответ

3 голосов
/ 28 марта 2012

Простое решение -

[x, i] = min(abs(conc - 0.16));

, после чего i будет содержать индекс. При этом сравниваются все элементы вектора conc, что является своего рода расточительным, потому что данные упорядочены, и вы можете выполнить бинарный поиск, но бинарный поиск, реализованный на уровне matlab, вероятно, будет медленнее для вектора из ста элементов.

...