matlab - 简化Matlab中穷举搜索的for循环次数
问题描述
我想在 Matlab 中使用详尽搜索找到客观结果。假设我有一个向量/矩阵“x”,如下所示:
x = [a b c;d e f]; a,b,c,d,e,f are Boolean (i.e., 0 or 1)
基于“x”,我有 2^6 个决定。一般来说,我们可以使用'for循环'来解决这个问题:
for t1=0:1
a = t1;
for t2=0:1
b = t2;
.....
for t6=0:1
f = t6;
g = a + ... + c + d + ... + f;
end
.....
end
end
但是,如果元素的数量增加,这将是繁重的。有没有其他方法可以在不添加许多“for循环”的情况下简化循环?
解决方案
x
求using的元素个数numel
。使用运算符生成以 10 为底的所有可能组合colon
。使用 . 将它们转换为以 2 为基数的字符向量dec2bin
。通过减去将它们分隔为单独的双元素'0'
。现在sum
通过第二维得到g
。
g = sum(dec2bin(0:2^numel(x)-1)-'0', 2);
请注意,随着变量数量的增加,将需要更多内存。例如,您的示例有 30 个变量(工作空间中的 30 个这样的变量不是一个好主意),需要 8.2 GB 内存,g
并且需要更多内存来处理。对于这种情况,您可以执行以下操作:
g = repmat(uint8(0),1,2^numel(x));
for k = 0:2^numel(x)-1
g(k+1) = sum(dec2bin(k)-'0', 2);
end
但请注意,它uint8
有其局限性 (0-255)
推荐阅读
- python - 如何在 Python 中增加输出文件名
- ruby-on-rails - Rails 的脚手架 - 引导应用程序
- unix - Unix命令将多行合并为一行
- swagger-ui - 我在为 OpenAPI 3 中的响应指定 XML 示例时遇到困难
- java - 刮擦时缺少表格元素
- ms-access - 如果满足大小写,如何设置图像可见?
- reactjs - 带有保存和取消按钮的 React.js 手风琴
- python - 这个 Python plus BeautifulSoup 脚本有什么问题?
- python - 将分组的熊猫数据应用回原始数据框
- asp.net - 接收 HTTP post 数据并返回 ok(200)