Как отфильтровать список (удалить ненужные элементы)? - PullRequest
1 голос
/ 20 января 2012

Я просмотрел документацию, но не могу найти ответ. Предположим, у меня есть список

a=(1:1000);

Как мне выполнить простой фильтр, например, для всех чисел, кратных 7 и больше 250?

Ответы [ 2 ]

6 голосов
/ 20 января 2012
  isDivisable = mod(a,7)==0;
  isGreater  = a>250;
  out = a(isDivisable & isGreater);
2 голосов
/ 20 января 2012

Это не список. Это массив. И вы можете использовать логическое индексирование (вектор из 1 и 0) для сбора записей, которые вас интересуют.

Таким образом, следующее возвращает логический вектор с '1', где числа в a кратны 7:

div7 = mod(a, 7) == 0

И вы можете использовать это, чтобы получить нужные элементы из вектора a:

b = a(div7)

Возвращает новый вектор с элементами, где div7 равен 1.

Конечно, вы можете комбинировать логические векторы, чтобы получить более сложные «селекторы». Итак, как показал Андрей

bigger250 = (a>250)

- это вектор такой же длины, что и a, но с '1', где a (i)> 250 И вы можете использовать это вместе с div7_vec:

b = a(div7 & bigger250)

Знак & создает новый вектор, который является поэлементным "и" обоих логических векторов. Таким образом, вы получите вектор с 1, где оба условия выполняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...