Условный массив подмножеств между диапазонами - PullRequest
0 голосов
/ 28 июня 2018

Я хочу фильтровать данные в определенном диапазоне.

dummy = [1,2,3,4,5,6,7,8,9,10]

Это работает для одного условия:

dummy[dummy .> 4]

Если я попытаюсь установить диапазон:

dummy[dummy .> 4 & dummy .< 7]

Эта логика не обеспечивает ожидаемую выходную фильтрацию> 4 и <7. </p>

Это сделал трюк

dummy[(dummy .> 4) .& (dummy .< 7)]

1 Ответ

0 голосов
/ 29 июня 2018

Индексирование по логическому массиву, dummy[(4 .< dummy) .& (dummy .< 7)] или dummy[4 .< dummy .< 7] должно работать; круглые скобки в первом фрагменте обязательны из-за приоритета оператора. Для большей ясности с более крупными фильтрами генерация логического массива может быть векторизована с использованием макроса @.:

dummy[@. 4 < dummy < 7]

Обратите внимание, что фильтрация с использованием логических массивов будет выделять память для промежуточного массива; таким образом, функции filter / filter! могут пригодиться. Оба следующих вызова эквивалентны, причем последний улучшает читаемость для больших условий.

filter(x -> 4 < x < 7, dummy)
filter(dummy) do x
    4 < x < 7
end

Функция filter! может использоваться вместо filter, если допустима мутация существующего массива.

...