2017-07-26 57 views
1

我有一個對象,我們稱之爲發射器。每個發射器都有一個ID和一個類型。我想覆蓋eq()和neq()來比較發射機。因此,我們需要檢查transmitter1.type == transmitter2.type和transmitter1.id == transmitter2.id。我的代碼如下:MATLAB中多維數組的自定義比較?

result = ([t1.type] == [t2.type]) & ([t1.id] == [t2.id]); 

(比較大小後)。這對於單發射器和發射器的1-d陣列非常有用。然而,對於發射器的多維陣列,結果是1d邏輯陣列。舉例來說,如果我們有

md_transmitters = [t1 t2; t3 t4]; 

然後

md_transmitters == md_transmitters 

回報

[1 1 1 1] 

代替

1 1 
1 1 

有什麼辦法,for循環之外,使它返回一個多維的邏輯數組?

回答

0

當您從對象中獲取typeidplace them in an array(例如[t1.type])時,會發生整形爲1-D陣列。你應該可以用一個簡單的reshape撤消此:

result = reshape(([t1.type] == [t2.type]) & ([t1.id] == [t2.id]), size(t1)); 

這裏是一個廣義實施任何形狀的輸入:

% Get input sizes: 
size1 = size(t1); 
size2 = size(t2); 

% Check sizes: 
if isscalar(t1) 
    outSize = size2; 
elseif isscalar(t2) || isequal(size1, size2) 
    outSize = size1; 
else 
    % Display an error here for mismatched sizes! 
end 

% Output: 
result = reshape(([t1.type] == [t2.type]) & ([t1.id] == [t2.id]), outSize); 
+0

的感謝!那完美的作品。唯一不適用的情況是將「標量」(即一個發射機)與發射機陣列進行比較。這是用一個簡單的if/else修復的。 – chuck91827