【问题标题】:Select a binary matrix at random - Matlab随机选择一个二进制矩阵 - Matlab
【发布时间】:2011-12-30 11:13:42
【问题描述】:

我正在处理较大的二进制矩阵,目前最大为 100x100。

假设我正在使用 30x30 二进制矩阵。那么一共有2^(30x30)个二进制矩阵。我想随机选择一个二进制矩阵,其中每个 2^(30x30) 矩阵具有相同的被选中概率。

我的解决方案尝试是使用具有 n = 2^(30x30) 的函数 randi(n) 选择 1 到 2^(30x30) 之间的数字,然后将结果转换为适当的二进制矩阵。我遇到的问题是,randi(n) 不采用大于 2^54 的 n 值。总的来说,Matlab 似乎不喜欢非常大的数字。

有什么建议吗?

【问题讨论】:

    标签: matlab random matrix binary


    【解决方案1】:

    如果每个布尔矩阵具有相等的概率,则矩阵的元素每个具有相等的概率 0 和 1。您可以用 n² 均匀随机布尔值填充适当大小的矩阵.

    我手边没有 MATLAB,但在 Octave 中你会做类似unidrnd(2, n, n) - 1 的事情。

    【讨论】:

    • 谢谢,现在看起来很明显。全新的视角通常会有所帮助... :)
    【解决方案2】:

    您可以在 [0 1] 范围内使用randint

    matrix=randint(30,30,[0 1]);
    

    您还可以使用rand 并对生成的矩阵进行阈值处理:

    matrix=rand(30,30);
    matrix=round(matrix);
    

    编辑:刚刚意识到它也适用于randi,语法如下:

    matrix=randi([0 1],30,30);
    

    【讨论】:

    • 谢谢。正如@larsmans 指出的那样,我错过了每个单独元素具有相同概率为 1 或 0 的联系。