matlab求真值表,在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

編輯:使用重塑,而不是列提領了進一步的性能改進

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值