Actually, think I figured out an answer. I can just use repmat to create a matrix of n copies of the vector, and use == with the vector to compare it that way.
Produce equality matrix based on elements in vector.
3 ビュー (過去 30 日間)
古いコメントを表示
Given two equally sized vectors A and B, is there any way to make a matrix C of 1's and zero's such that the kth row of C contains 1's wherever elements of B equal the kth element of A?
I can do it by looping through elements of A, but I want to know if there's a vectorised way of doing this to speed it up?
2 件のコメント
Guillaume
2020 年 3 月 27 日
"I can just use repmat"
You don't need repmat. Implicit expansion will take care of repeating the elements for you and will be faster. See my answer.
採用された回答
Guillaume
2020 年 3 月 27 日
Trivially done.
%assuming A and B are both row vectors:
C = A.' == B;
If they're both column vectors, transpose B instead.
その他の回答 (3 件)
Bernd Wagner
2020 年 3 月 27 日
Does the Logical opperator C= A==B not do that work?
It compares values in Vector A and responds a logical value 1 if the Value is also on the same line in B. Hence your C vector will be a vector of 0 and 1 with 1 if A==B.
darova
2020 年 3 月 27 日
Try bsxfun
% make all combinations using bsxfun
C = bsxfun(@minus,b(:),a(:)'); % b - rows, a - columns
[i,j] = find(~C); % find 'zero'
C1 = C*0;
C1(i,:) = 1; % make entire row '1' if any element a==b
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!