2013-12-11 101 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

好吧,如果沒有關於負值的說法,當然應該保留! :-) –

+0

如果*沒有*說負值,當然沒有! ;-)我想我們必須問OP。 –