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」時,它顯示爲邏輯類?謝謝。
謝謝,這確實導致我的「vecempty」成爲一個邏輯類。然而,我在上面做了什麼,是否有理由爲什麼我的「vecempty」不會被認爲是一個邏輯類? – pdhami 2015-01-31 20:50:45
當你的數組已經初始化爲數字,並且你嘗試給它的一個元素賦一個邏輯值時,Matlab將它轉換爲0或1,數組保持不變。如果你由於某種原因在開始時並不知道你確實需要一個邏輯數組,你可以稍後用'logical(vecempty)'來轉換它。但現在我不明白何時會出現這種情況。也許你可以澄清? – FliegenderZirkus 2015-01-31 21:26:32
推廣FliegenderZirkus所說的,當您用圓括號將索引賦值爲初始化值時,MATLAB會將賦值右側的值強制轉換爲左側值的類。所以真假被強制加倍,這是vecempty的初始化類型。 – SCFrench 2015-01-31 21:42:41