2013-05-23 3 views
1

Скажите, что у нас есть матрица 3x3 в matlab. Если мы наберем x(:), это выберет все элементы в матрице, не так ли?Все пиксели, кроме одного пикселя в matlab

Как мы можем выбрать все элементы кроме элемент x(2,2)? Что мы должны вводить в этом случае?

Спасибо.

+0

Возможный дубликат? http://stackoverflow.com/q/11054728/2065121 –

+1

@EitanT: Я только что создал новый тег [tag: matrix-indexing], который должен применяться к множеству вопросов .. Я не могу поверить, что это не было сделано раньше :) Существующие теги относятся к индексированию баз данных – Amro

+0

@Amro хорошая работа! –

ответ

1

Я хотел бы сделать это следующим образом: во-первых, создать логический массив true с, что бы выбрать все элементы, если они используются в качестве индекса маски:

mask = true(size(x)); 

Теперь набор элементов 2,2 быть ложь, поэтому отменив его:

mask(2,2) = false; 

Теперь используйте эту маску, чтобы выбрать элементы из x:

myValues = x(mask); 

EDIT: Удалены второй, неправильный ответ.

+0

Спасибо за ваш ответ. Когда я попробовал ваше * более простое решение, я получил эту ошибку: «Несоответствие подстрочного присваивания». Почему это? – Simplicity

+0

Вы не можете удалить элемент, который приведет к «непрямоугольной матрице», так сказать. Метод, основанный на логическом индексировании, является более выразительным, так или иначе, и не включает мутацию матрицы. –

+0

@JoshuaBarr Вы правы, извиняйтесь. Как я уже сказал, я видел это на другом ответе, я не последовал за ним должным образом. – jazzbassrob

0

Вы могли бы использовать:

A(setdiff(1:numel(A),ceil(numel(A)/2))) 

Например, для ввода в:

>> A = randi(100,3) 

A = 

    49 71 68 
    45 76 66 
    65 28 17 

Выходом является:

>> A(setdiff(1:numel(A),ceil(numel(A)/2))) 

ans = 

    49 45 65 71 28 68 66 17 
Смежные вопросы