2015-03-30 5 views
1

могут у меня есть что-то вроделогическая операция в выражении диапазона вектора в MATLAB

A=1:10; 

A(1:2 && 5:6)=0; 

означающего Я хочу обнулить определенные диапазоны в моем выражении индекса вектора в одной строке

Возможно ли это?

А что, если я хотел обнулить все остальное, как

A(~[1:2]) = 0 

Что это способ логического НЕ в векторной индексации?

Благодаря

+0

И что, если бы я хотел обнулить все остальное, как A (~ [1: 2]) = 0? Каков путь логического НЕ в векторном индексировании? – user3374479

+0

Я отредактировал свой ответ так же, как и нуль, в дополнение к указанным вами индексам. – eigenchris

+0

спасибо, отлично работает, но разве нет что-то с логическими выражениями? Разве это не должно быть быстрее? – user3374479

ответ

1

должно работать:

idx = [1:2,5:6]; 
A(idx) = 0 

Если вы хотите обнулить дополнение вектора индексов:

idx = [1:2,5:6]; 
A(~ismembc(1:length(A),idx)) = 0 

Где ismembc это быстрее, облегченная версия ismember, которая предполагает, что массив отсортирован и не разрезанные без NaN элементов. (Кредит составляет this question.)

1

Просто сделайте A([1:2 5:6]). 1.e, просто создайте вектор индексов, которые вы хотите обнулить.

Смежные вопросы