※ 引述《sonia6121 (sonia)》之銘言:
: 這是我第一次發文發問,如有冒犯錯誤請各位大大們糾正我
: 我是matlab新手剛接觸不久
: 最近在寫一個程式
: 我的目的是要把txt檔裡面的值取出來
: [0111
: 00101
: 11011
: ...
: ...共26行]
: 每行兩兩相比總共會有325種組合
: 長度相同的直接做xor(ex:00101 )xor=11110然後再做sum取出1+1+1+1+0=4這個值
: 11011
: 假如長度不同就要分別用前段跟後段取xor在相加(ex:0111 )xor的作法(0111)=0101
: 00101 0010
: 做sum=2再和xor(0111)=0010 sum=1 相加=3
: 0101
% data generation
M = cell(26, 1);
for i = 1:26
M{i, 1} = randi(2, randi(2,1,1)+3, 1)' - 1;
end
% total combinations
combns = nchoosek(1:size(M, 1), 2);
% results
dfree = zeros(size(combns, 1), 1);
% computation
for i = 1:size(combns, 1)
% temporary variables (可以不用,只是程式易讀性低)
a = M{combns(i, 1), 1};
b = M{combns(i, 2), 1};
len_a = length(a);
len_b = length(b);
% if the lengths are equal
if len_a == len_b
dfree(i) = sum(xor(a, b));
else
% nonequal condition
if len_a > len_b
dfree(i) = sum(xor(a(1:len_b), b)) + ...
sum(xor(a((len_a-len_b+1):end), b));
else
dfree(i) = sum(xor(a, b(1:len_a))) + ...
sum(xor(a, b((len_b-len_a+1):end)));
end
end
end