我想从MATLAB中的第一个矩阵中创建第二个矩阵。请看下图:
AB = A和B
AC = A和C
BC = B和C
码:
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
如何设置新值以及如何在结果矩阵中连接标签?
答案 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