如何在下一列中设置多个矩阵列并在新矩阵中设置?

时间:2017-01-20 13:46:28

标签: matlab matrix

我想从MATLAB中的第一个矩阵中创建第二个矩阵。请看下图:

AB = A和B

AC = A和C

BC = B和C

enter image description here ====>>> enter image description here

transactions={{'A','C'};{'A','B'};{'A','B','C'}}; 
items = unique([transactions{:}]); % A,B,C
for i = 1:size(transactions,1)
    T(i,ismember(items,transactions{i,:})) = 1; %convert transactions to matrix
end
. 
.
T1 = zeros(size(transactions,1), nchoosek(length(items),2));
for k=1:5
 for i=1: length(items)
   for j=i+1 : length(items)

      z = bitand(T(k,i),T(k,j)))
           % set z in matrix T1 %                                      
   end
 end
end

如何设置新值以及如何在结果矩阵中连接标签?

1 个答案:

答案 0 :(得分:0)

只需使用Matlab的&运算符(see documentation)。因为Matlab是一种解释型语言,它会自动将0和1转换为逻辑矩阵。

例如:

X = [1 0 1; 1 0 0; 1 1 1; 1 0 0; 1 1 0];
Y(:,1) = X(:,1) & X(:,2);
Y(:,2) = X(:,1) & X(:,3);
Y(:,3) = X(:,2) & X(:,3);

矩阵Y的类型为logical,并且是所需的输出:

>> Y

Y =

     0     1     0
     0     0     0
     1     1     1
     0     0     0
     1     0     0

或者,您可以使用struct来提高可读性:

>> X.A = [1 1 1 1 1];
>> X.B = [0 0 1 0 1];
>> X.C = [1 0 1 0 0];
>> Y.AB = X.A & X.B;
>> Y.AC = X.A & X.C;
>> Y.BC = X.B & X.C;
>> Y

Y = 

    AB: [0 0 1 0 1]
    AC: [1 0 1 0 0]
    BC: [0 0 1 0 0]

如果要自动执行此过程,可以执行以下操作:

X.A = [1 1 1 1 1]';
X.B = [0 0 1 0 1]';
X.C = [1 0 1 0 0]';
names = fieldnames(X);
N = length(names);

combos = nchoosek(1:N,2);
for i=1:N
    Y.(char([names(combos(i,1)) names(combos(i,2))])) = ...
        X.(char(names(combos(i,1)))) & X.(char(names(combos(i,2))));
end

struct2table(Y)

其中包含以下内容:

ans = 

     AB       AC       BC  
    _____    _____    _____

    false    true     false
    false    false    false
    true     true     true 
    false    false    false
    true     false    false