如何使用MATLAB

时间:2016-07-30 23:26:06

标签: matlab sorting venn-diagram

我有4列(A,B,C,D),每列都有文字,数字和字符组合的数据。

例如:R.E(-18.01)AEEPSAFMTRL( - .98).R

这四列包含这样的字符串,其中一些只存在于一列中,一些存在于2中,一些存在于3中,一些存在于所有可能的组合中。列的大小也不同。

我需要构建一个4路维恩图,它可以给我所有可能的组合值。

我不需要构建维恩图,我只需要使用MATLAB的值

由于

1 个答案:

答案 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