私の主なスクリプトでは、同じ要素を持つS
のセル配列を削除しようとしています。たとえば、あなたが(a=v=2
付き)現在のスクリプトを実行した場合、その後、あなたはS
に次の値を取得します:等しい要素を持つセル配列を削除する
S{1}(:, :, 1) = [0 0; 0 0]; S{1}(:, :, 2) = [0 0; 0 0];
S{2}(:, :, 1) = [0 0; 1 1]; S{2}(:, :, 2) = [0 1; 0 1];
S{3}(:, :, 1) = [0 1; 0 1]; S{3}(:, :, 2) = [0 0; 1 1];
S{4}(:, :, 1) = [1 0; 1 0]; S{4}(:, :, 2) = [1 1; 0 0];
S{5}(:, :, 1) = [1 1; 0 0]; S{5}(:, :, 2) = [1 0; 1 0];
S{6}(:, :, 1) = [1 1; 1 1]; S{6}(:, :, 2) = [1 1; 1 1];
コードは同じサブセットを持つようS{2}
とS{3}
、S{4}
とS{5}
が表示されるはずです。したがって、私が得たい結果はS{1}
,S{2}
,S{4}
、およびS{6}
である必要があります。
私はMATLABがismember
,isequal
などの機能を持っていることを知っていますが、セルアレイでは機能しないようです...またはそれらを動作させることができませんでした。
これは現在書かれているようにセルアレイでこれを処理する簡潔な方法はありますか?
メインスクリプト:
clear all
clc
a = 2;
v = 2;
R = dec2base(0:1:v^(v^a)-1, v)-'0';
cnt1 = 0;
cnt2 = 0;
for j=1:v^(v^a)
% List all degenerates in Psi1
V = FN_Break(a, v, R(j,:));
if V > 0 % Connector is degenerate
cnt1 = cnt1 + 1;
Psi1(cnt1,1) = j-1;
% Store all "breaks" into cell array S
S{cnt1} = FN_Break_T(a,v,R(j,:));
else % Connector is not degenerate
cnt2 = cnt2 + 1;
Psi2(cnt2,1) = j-1;
end
end
機能FN_Break
:
function [valU] = FN_Beak(a, v, R)
FreeAtomCtr = 0;
for j=0:v^a-1
for k=1:a
for l=1:a
B = dec2base(j,v,a);
atom(l,j+1) = str2num(B(l));
end
end
end
for j=1:a % Do this for each atom
cnt(1:v) = 0;
for k = 1:v^a % Do this for each position of each atom
for l=0:v-1 % Break this down for each value
if atom(j,k) == l
cnt(1+l) = cnt(1+l) + 1;
T(1+l, cnt(1+l),j) = R(k);
end
end
end
end
for j=1:a
B = unique(T(:,:,j), 'rows');
if dot(size(B), [1 0]) < v % does not depend on this atom
FreeAtomCtr = FreeAtomCtr + 1;
end
end
valU = FreeAtomCtr;
end
機能FN_Break_T
:
function [valU] = FN_Beak_T(a, v, R)
FreeAtomCtr = 0;
for j=0:v^a-1
for k=1:a
for l=1:a
B = dec2base(j,v,a);
atom(l,j+1) = str2num(B(l));
end
end
end
for j=1:a % Do this for each atom
cnt(1:v) = 0;
for k = 1:v^a % Do this for each position of each atom
for l=0:v-1 % Break this down for each value
if atom(j,k) == l
cnt(1+l) = cnt(1+l) + 1;
T(1+l, cnt(1+l),j) = R(k);
end
end
end
end
for j=1:a
B = unique(T(:,:,j), 'rows');
if dot(size(B), [1 0]) < v % does not depend on this atom
FreeAtomCtr = FreeAtomCtr + 1;
end
end
valU = T;
end
関数によって出力されたセルに '2 x 2 x 2'の配列が含まれていることは意図的ですか? – excaza
はい。謝罪私は「投票」タブにいて、あなたの質問を見ませんでした。 – dsmalenb