2017-01-20 11 views
1

私はMATLABの最初の行列から2番目の行列を作りたいと思います。次の列に複数の行列の列を設定し、新しい行列に設定する方法は?

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 

新しい値を設定する方法と結果行列でラベルを連結する方法は?

答えて

0

Matlabの&演算子(see documentation)を使用してください。 Matlabはインタープリター言語なので、自動的に0と1を論理行列に変換します。例えば

:マトリックスYはタイプlogicalであることと、所望の出力となります

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 

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 
+0

ありがとう。私の行列をX.A = [1 1 1 1 1]に変換する方法は? –

+0

@Digipngデータをどのようにロードするか分からずにその質問に答えることはできません。 Excelから? '.mat'ファイルから? –

+0

いいえ、私は手動でデータを入力しました。問題のコードに表示されているとおりです。 –

関連する問題