【问题标题】:Create a matrix from a distribution, where rows add up to 1从分布创建一个矩阵,其中行加起来为 1
【发布时间】:2016-05-04 04:42:15
【问题描述】:

我想知道如何创建一个包含 n 个列的矩阵,其中每一列是0:0.01:1 的分布方式 我理想中想要的是ndgrid 的一种形式,带有

[x1,x2,x3...,xn] = ndgrid(0:0.01:1,0:0.01:1.....m times) 

我的限制是行加起来最多为 1。也就是说,我只会保留上述网格中加起来为 1 的那些行的索引。 但正如您所理解的,这太大而无法计算。 因此,我正在寻找实现这一目标的简短/有效的方法。 我将不胜感激任何帮助。

【问题讨论】:

  • 我很难理解你的意思。如果您在谈论多维矩阵,最好使用关键字作为 N 维矩阵,维度 1 而不是行等等。请编辑问题并澄清涉及尺寸的部分,以便我们准确了解您的需求。也就是说,无论如何您都无法保存完整的 matix。为什么不直接定义元素 i 如何与矩阵相关的数字(最好与 matlab 使用线性索引对矩阵进行索引的方式相同)并迭代单个向量?
  • n 维度的矩阵中,您如何称呼row

标签: matlab matrix probability stochastic


【解决方案1】:

如果您只有一个二维矩阵并且想要过滤它,以便只有加起来为1 的行,您可以通过对所有行求和并比较然后将其用作索引来实现:

>> A=[0.1,0.3,0.3,0.3; % adds up to 1
      0.5,0.4,0.1,0.4; % adds up to 1.2
      0.4,0.2,0.1,0.3; % adds up to 1
      0.0,0.1,0.5,0.0] % adds up to 0.6
>> A(sum(A,2)==1,:)

如果您 sum(A,2) 在第二维(行)上对 A 求和,则将此总和与 1 进行比较。这给出了一个布尔数组,该数组用作索引来选择矩阵的行,然后给出:

ans =
  0.1000    0.3000    0.3000    0.3000
  0.4000    0.2000    0.1000    0.3000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多