2014-10-04 1559 views
1

我正在使用非常大的Matlab 多維相似矩陣我想找出它們之間的差異。matlab:如何比較兩個矩陣,以獲得不同的元素之間的差異

這兩個矩陣具有相同的大小。

下面是一個例子:

A(:,:,1) = 

    1  1  1 
    1  1  1 
    1  1  1 


A(:,:,2) = 

    1  1  1 
    1  1  1 
    1  1  1 


A(:,:,3) = 

    1  1  1 
    1  1  1 
    1  1  1 


B(:,:,1) = 

    1  1 99 
    1  1 99 
    1  1  1 


B(:,:,2) = 

    1  1  1 
    1  1  1 
    1  1  1 


B(:,:,3) = 

    1  1 99 
    1  1  1 
    1  1  1 

我需要給我的indeces一個函數,不同的價值觀,在這個例子中,這將是:

output = 

    1  3  1 
    1  3  3 
    2  3  1 

我知道,我可以使用像find(B~=A)find(~ismember(B, A))這樣的函數我不知道如何將其輸出更改爲我想要的單元。

謝謝大家!

回答

3

你差不多準確無誤!請記住,find找到您的矩陣(或向量)中您要檢查的布爾條件的主要指數正在滿足。如果您想要實際的行/列/切片位置,則需要使用ind2sub。你會這樣調用它:

%// To reproduce your problem 
A = ones(3,3,3); 
B = ones(3,3,3); 
B(7:8) = 99; 
B(25) = 99; 

%// This is what you call 
[row,col,dim] = ind2sub(size(A), find(A ~= B)); 

的第一個參數是ind2sub您正在搜索其中的矩陣大小。由於A的尺寸等於B,我們可以選擇AB作爲第一個輸入,我們使用size來幫助我們確定矩陣的大小。第二個輸入是我們想要訪問矩陣的列主要索引。這些只是find的結果。

row,coldim會給你你3D矩陣中哪些元素不相等的行,列和片。還要注意,這些將是列向量,因爲find的輸出將產生列主要索引的列向量。因此,我們可以將每個列向量連成一個矩陣並顯示您的信息。因此:

locations = [row col dim]; 
disp(locations); 

1  3  1 
2  3  1 
1  3  3 

這樣,該矩陣的第一列表示的,其中矩陣值是不相等的,此矩陣的第二列告訴您的列位置,其中矩陣值是不相等的行位置,最後第三列告訴你矩陣值不相等的切片。因此,我們在這個矩陣中有三個不相等的點,它們分別位於(1,3,1), (2,3,1)(1,3,3)。請注意,由於find的性質,因爲它首先在矩陣的列中進行搜索,所以未分類。如果您希望按照您在示例輸出中的排序方式進行排序,請使用sortrows。如果我們這樣做,我們得到:

sortrows(locations) 

ans = 

    1  3  1 
    1  3  3 
    2  3  1 
相關問題