我有4列(A,B,C,D),每列都有文字,数字和字符组合的数据。
例如:R.E(-18.01)AEEPSAFMTRL( - .98).R
这四列包含这样的字符串,其中一些只存在于一列中,一些存在于2中,一些存在于3中,一些存在于所有可能的组合中。列的大小也不同。
我需要构建一个4路维恩图,它可以给我所有可能的组合值。
我不需要构建维恩图,我只需要使用MATLAB的值
由于
答案 0 :(得分:1)
您要求给定的数据列X和另一个Y之间的交集,其中X或Y甚至可以是另一对列之间的交集。
设Z是X列和Y列的交集.Matlab中的列向量Z为Z = X( any( bsxfun( @eq, X, Y' ), 2) );
这是一个简短的脚本,可以比较A,B,C和D之间的第一个交叉点,但我将剩下的部分留给您。
% Intersection function
f = @(X,Y) X( any( bsxfun( @eq, X, Y' ), 2) );
% Matrix M of all columns, built however you have it
M = zeros( max([size(A,1),size(B,1),size(C,1),size(D,1)]), 4);
M(1:size(A,1),1) = A; M(1:size(B,1),2) = B;
M(1:size(C,1),3) = C; M(1:size(D,1),4) = D;
M( M==0 ) = nan; % Empty space in M is nan, which won't trigger as equal
k = 1;
% Compares and stores AB, AC, AD, BC, ...
for i = 1 : (size(M,2)-1)
for j = (i+1) : size(M,2)
n = numel( f( M(:,i), M(:,j) ) );
N( 1:n, k ) = f( M(:,i), M(:,j) ); k=k+1;
end
end