i 列と i 2行の真理値表を MatLab で作成したいと考えています。たとえば、i=2 の場合、
T =
[0 0]
[1 0]
[0 1]
[1 1]
これを行うコードはすでにここに作成されています
これは、大規模なプロジェクトの一部です。効率性が懸念事項です。真理値表を作成するためのより効率的なコードはありますか? MatLab にはこれを行うための機能が組み込まれていますか?
編集:フォーマットについて申し訳ありません!
i 列と i 2行の真理値表を MatLab で作成したいと考えています。たとえば、i=2 の場合、
T =
[0 0]
[1 0]
[0 1]
[1 1]
これを行うコードはすでにここに作成されています
これは、大規模なプロジェクトの一部です。効率性が懸念事項です。真理値表を作成するためのより効率的なコードはありますか? MatLab にはこれを行うための機能が組み込まれていますか?
編集:フォーマットについて申し訳ありません!
ndgrid はここであなたの友達です:
function t = truthTable(n)
dims = repmat({[false, true]}, 1, n);
[grids{1:n}] = ndgrid(dims{:});
grids = cellfun(@(g)g(:), grids, 'UniformOutput',false);
t = [grids{:}];
最初に、真理値表の次元数のグリッドを作成する必要があります。それらを取得したら、それらを列化して必要な列ベクトルを取得し、それらの列ベクトルを水平方向に連結して真理値表を取得できます。
これのパフォーマンスはかなり競争力があると思います。
>> truthTable(2)
ans =
0 0
1 0
0 1
1 1
>> truthTable(4)
ans =
0 0 0 0
1 0 0 0
0 1 0 0
1 1 0 0
0 0 1 0
1 0 1 0
0 1 1 0
1 1 1 0
0 0 0 1
1 0 0 1
0 1 0 1
1 1 0 1
0 0 1 1
1 0 1 1
0 1 1 1
1 1 1 1
>>
>> timeit(@() truthTable(20))
ans =
0.030922626777
EDIT:パフォーマンスをさらに向上させるために、列の逆参照の代わりにreshapeを使用してください
function t = truthTable(n)
dims = repmat({[false, true]}, 1, n);
[grids{1:n}] = ndgrid(dims{:});
grids = cellfun(@(g) reshape(g,[],1), grids, 'UniformOutput',false);
t = [grids{:}];
>> timeit(@() truthTable(20))
ans =
0.016237298777