2015-01-31 61 views
1

我一直想循環訪問一個數組/矩陣(而不是爲了練習/學習而使用關係運算符),並且if滿足一個簡單的條件,用true或false值替換每個元素,並最終得到一個邏輯類的結果數組。Matlab:用true/false值替換每個元素(邏輯數組)

vec = [5 9 3 4 6 11]; 

[r,c] = size(vec); 

vecempty = zeros(r,c); 

for i = 1:r; 
    for j = 1:c 
     if vec(i,j) > 5; 
      vecempty(i,j) = true; 
     else 
      vecempty(i,j) = false; 
     end 
    end 
end 

fprintf('Your truth matrix: \n\n\n') 

disp(vecempty) 

total = 0; 

for i = 1:r; 
    for j = 1:c; 
     total = total + vecempty(i,j); 
    end 
end 

fprintf('Total number of truth elements: %d \n\n\n', total) 

對於我的 「VEC(I,J)」 條件下,我開始了他們 「= 1」 或 「= 0」,但我猜這只是提供的數字本身,而不是真或假。我因此去了「=真」或「=假」,但我想知道,爲什麼我返回的數組(vecempty)沒有顯示爲一類邏輯?

按照同樣的價值觀:

Vectruth = vec > 5 

結果 「Vectruth」 返回爲一個邏輯類。我很困惑,如果我在循環中返回「true」或「false」,爲什麼我的結果向量不會顯示爲邏輯類,當使用「vec> 5」時,它顯示爲邏輯類?謝謝。

回答

1

可以通過調用

vecempty = false(r,c); 

代替

vecempty = zeros(r,c); 

當然初始化的邏輯陣列,false可以通過true代替,如果合適的話。

+0

謝謝,這確實導致我的「vecempty」成爲一個邏輯類。然而,我在上面做了什麼,是否有理由爲什麼我的「vecempty」不會被認爲是一個邏輯類? – pdhami 2015-01-31 20:50:45

+0

當你的數組已經初始化爲數字,並且你嘗試給它的一個元素賦一個邏輯值時,Matlab將它轉換爲0或1,數組保持不變。如果你由於某種原因在開始時並不知道你確實需要一個邏輯數組,你可以稍後用'logical(vecempty)'來轉換它。但現在我不明白何時會出現這種情況。也許你可以澄清? – FliegenderZirkus 2015-01-31 21:26:32

+0

推廣FliegenderZirkus所說的,當您用圓括號將索引賦值爲初始化值時,MATLAB會將賦值右側的值強制轉換爲左側值的類。所以真假被強制加倍,​​這是vecempty的初始化類型。 – SCFrench 2015-01-31 21:42:41