Count equal values in multiple matrices
2 ビュー (過去 30 日間)
古いコメントを表示
I have a number of M by N matrices with random integers between 1 and 5, for example if I have:
X1 = [1 2 1 3 5 4 2 4 3; 5 3 3 2 5 4 3 2 3; 3 3 2 4 5 3 2 4 1; 4 5 3 4 1 4 2 3 1;]
X2 = [5 4 4 3 5 1 2 3 1; 5 3 2 4 2 3 1 4 3; 4 2 3 3 4 1 3 5 2; 1 3 1 3 4 5 3 2 4;]
The answer is
X2 = [1 1 1 2 2 1 2 1 1; 2 2 1 1 1 1 1 1 2; 1 1 1 1 1 1 1 1 1; 1 1 1 1 1 1 1 1 1;]
However, my real matrix is much larger and I have >>2 matrices to compare. What is a fast vectorized way to perform this operation?
1 件のコメント
Image Analyst
2014 年 9 月 30 日
What if you have
X1 = [1 2 1 3 5 4 2 4 3; 5 3 3 2 5 4 3 2 3; 3 3 2 4 5 3 2 4 1; 4 5 3 4 1 4 2 3 1;]
X2 = [5 4 4 3 5 1 2 3 1; 5 3 2 4 2 3 1 4 3; 4 2 3 3 4 1 3 5 2; 1 3 1 3 4 5 3 2 4;]
X3 = [1 2 1 9 1 4 2 4 3; 5 3 3 2 5 4 3 2 3; 3 3 2 4 5 3 2 4 1; 4 5 3 4 1 4 2 3 1;]
X4 = [5 4 4 9 1 1 2 3 1; 5 3 2 4 2 3 1 4 3; 4 2 3 3 4 1 3 5 2; 1 3 1 3 4 5 3 2 4;]
Look at the 4th column - we have a pair of 3's and a pair of 9's. And in the 5th column, a pair of 1's. So in the output would it now be 4? In the extreme, you could just take a histogram of every element across the X arrays. The histogram will have 1's in non-repeated bins and 2, 3, 23, or whatever in bins that are repeated for some number. What do you want to do in that case?
回答 (2 件)
Michael Haderlein
2014 年 9 月 30 日
I guess you don't want to overwrite X2. Introducing X3, the easiest way is:
X3 = 1+(X1==X2);
2 件のコメント
Iain
2014 年 9 月 30 日
If you can concatenate your matrices in the 3rd dimension:
x_oth = X2;
x_oth(:,:,2) = X3;
...
Then you may be able to use
Y =1+ sum(bsxfun(@eq,X1,x_oth),3);
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!