matlab - 需要考虑 MATLAB 中二元选择的可能组合

标签 matlab counting

我想构造一个 2^n*n 矩阵来评估 n 个代理的二元决策的所有可能的决策向量。

因此,N个人在{0,1}之间进行选择,他们的选择形成了一个决策向量,例如[1,1,0,1,0.....]。我想要一个由所有可能的决策向量组成的矩阵。

我尝试使用 repmat 复制 {0,1} n 次,然后使用 allcomb,但这不起作用。 (也许我做错了。)

我还在某处读到我可以使用 A = (dec2bin(0:(2^n)-1)); 事实上,我确实得到了类似于我的东西然而,之后我的程序的其余部分(用于我研究的实际分析部分)给出了垃圾结果。

我在 matlab 中编写了一段代码,可以为 5 个人执行此操作(和模式),但我只嵌套了 5 个循环。我想延长这一点。任何帮助表示赞赏。

当前代码是

A= zeros (2^n,n); %creates blank strategy space 

x=0; % x is an iteration counting term and should be = 2^n if code runs correctly
for i=0:1

for j=0:1

    for k=0:1


        for l=0:1

            for m=0:1
               x=x+1;
               v1=i;
               v2=j;
               v3=k;
               v4=l;
               v5=m;
               A(x,:)=[v1 v2 v3 v4 v5]; % at termination this loop should generate an exhaustive list of all possible strategy profiles
            end
        end
    end
end
end
x;

我昨天才开始使用 MATLAB,所以我想这很糟糕......

最佳答案

如果我正确地解释了您的问题,给定 n 位,您希望将所有可能的十进制值枚举为从 0 到 2^n-1 的二进制等值(value)。这可以通过调用 dec2bin 来完成。并转换为数值数组:

n = 5;
A = dec2bin(0:2^n-1, n) - '0';

我提供了一个从 0 到 2^n-1 的向量,步长为 1,并允许 dec2bin 将这些十进制值中的每一个转换为二进制形式,有 n 位数字。

使用'0'进行减法很重要,因为dec2bin最初生成一个字符数组,其中每行都是二进制数字序列,但实际上是字符。如果要将字符数组转换为数字,请记住字符以 ASCII 表示。因此,用数字 0 的 ASCII 代码相减即可得出 0 和 1 的实际值。

使用n=5,我们得到这个(与您的代码生成的结果相同):

A =

     0     0     0     0     0
     0     0     0     0     1
     0     0     0     1     0
     0     0     0     1     1
     0     0     1     0     0
     0     0     1     0     1
     0     0     1     1     0
     0     0     1     1     1
     0     1     0     0     0
     0     1     0     0     1
     0     1     0     1     0
     0     1     0     1     1
     0     1     1     0     0
     0     1     1     0     1
     0     1     1     1     0
     0     1     1     1     1
     1     0     0     0     0
     1     0     0     0     1
     1     0     0     1     0
     1     0     0     1     1
     1     0     1     0     0
     1     0     1     0     1
     1     0     1     1     0
     1     0     1     1     1
     1     1     0     0     0
     1     1     0     0     1
     1     1     0     1     0
     1     1     0     1     1
     1     1     1     0     0
     1     1     1     0     1
     1     1     1     1     0
     1     1     1     1     1

关于matlab - 需要考虑 MATLAB 中二元选择的可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31839037/

相关文章:

javascript - 计算 ul 中 li 的数量并分配类别

c# - 在 C# 中,如何对计数操作进行时间限制?

matlab - 阻止 MATLAB 在找不到我要打开的文件时创建新文件

algorithm - 高效分布式计数

php - 如何计算php中包含零的位数

arrays - 获取数组最后 N 项的最短方法是什么?

R - 如何按年份使用累积总和并在满足条件时重新启动累积总和

python - Matlab 到 Python - 为什么嵌套 for 循环在 python 中运行频率是两倍?

objective-c - Objective-C 和 MATLAB/Octave 文件扩展名之间的重叠

plot - 使用副标题覆盖 ('visible' , 'off' ) matlab 中的图形属性