2013-12-11 3 views
0

У меня есть матрица 100x50. То, что я хочу сделать, это изменить ячейки, имеющие значение> 0 на 0, а ячейки, имеющие значение от 0 до 1. Я знаю его простую, но если кто-нибудь может проконсультироваться, как это сделать без циклов.изменить значения матрицы в Matlab

+1

Что делать с отрицательными значениями? Или нет? –

ответ

4
iiPos = M>0; 
iiZeros = M==0; 

M(iiPos) = 0; 
M(iiZeros) = 1; 
0
sizeMat = size(mat); % Obtain the size of the matrix 
final = zeros(sizeMat); % Create a zero full matrix. 
idxZero = find(Mat == 0); % Find where = 0; 
final(idxZero) = 1; % switch to 1. 
+1

@ Andy, Только для вашей информации, комментарий Matlab - '%'. Мне просто понравилось, потому что пользователь может легко скопировать код в командное окно без ошибок. – Vuwox

+0

вернул редактирование, может занять некоторое время, пока не появится –

4

Это отличный способ сделать это, используя logical not, если есть только неотрицательные числа:

M = 
    1 2 0 2 
    2 1 2 2 
    0 1 2 1 
    1 0 1 2 

M = ~M;  
M = 
    0 0 1 0 
    0 0 0 0 
    1 0 0 0 
    0 1 0 0 

Если у вас есть отрицательные числа, а, затем:

M = 
    0 -1 0 3 
    -3 0 -1 0 
    0 -2 0 1 
    1 0 -1 1 

M(M >= 0) = ~M(M >= 0)  
M = 
    1 -1 1 0 
    -3 1 -1 1 
    1 -2 1 0 
    0 1 -1 0 
2

Почему так сложно?

M = (M == 0); 

Для этого нули должны быть точными нулями. Если они только около нуля, используйте

M = (abs(M) < eps); 
+0

. Предполагается, что 'M' не может содержать отрицательные значения ... –

+0

@LuisMendo Вопрос указывает, что матрица содержит значения> 0 и значения = 0, ничего больше. Если значения <0, то было бы непонятно, что с ними делать. –

+1

@ADonda Я не вижу, что вопрос действительно определяет это. И, конечно же, в этом случае вы ничего не делаете с этими значениями. ... Но я согласен с вами в том, что идея OP, вероятно, заключается в том, что отрицательных значений нет –

0

В общем случае с отрицательными числами:

A = A.*(A<0) + (A==0); 
+0

. Предполагается, что отрицательные значения должны быть сохранены. –

+0

Ну, если _nothing_ говорят об отрицательных значениях, конечно, они должны быть сохранены! :-) –

+0

Если * ничего не сказано об отрицательных значениях, конечно же их нет! ;-) Думаю, нам придется спросить ОП. –

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