【问题标题】:Why MATLAB is showing "Index exceeds matrix dimensions." Error为什么 MATLAB 显示“索引超出矩阵维度”。错误
【发布时间】:2017-12-17 13:41:46
【问题描述】:

我是 MATLAB 新手,正在尝试学习贝叶斯网络。 运行这段代码会报错

索引超出矩阵维度。

排队

( for r = 1:length(nodes(root(rr)).values))

请帮帮我。

提前致谢

function [nodes, edges] = bnMsgPassInitiate(nodes, edges, root)
N = numel(nodes);

for X = 1:N % for every node

nodes(X).lambda = ones(1, length(nodes(X).values)); % l(x) = 1

Z = nodes(X).parents;
for pa = 1:length(Z) % for each parent of X
    edges(Z(pa),X).lambdaX = ones(1, length(nodes(Z(pa)).values)); % lX(z) = 1
end  

Y = nodes(X).children;
for ch = 1:length(Y) % for each child of X
    edges(X,Y(ch)).peyeX = ones(1, length(nodes(X).values)); % peyeY(x)
end

end

numRoots = length(root);
for rr = 1:numRoots
   **for r = 1:length(nodes(root(rr)).values)**
    nodes(root(rr)).peye(r) = nodes(root(rr)).CPT(r);
    nodes(root(rr)).P(r) = nodes(root(rr)).CPT(r);
end
childrenR = nodes(root(rr)).children;
for cr = 1:length(childrenR)
    [nodes, edges] = bnMsgPassSendPiMsg(root(rr), childrenR(cr), nodes, edges, []); %A = []
end
end

【问题讨论】:

  • 错误的哪一部分你不明白,“索引”或“矩阵维度”?我们不可能提供帮助,因为我们没有您的意见。 uk.mathworks.com/help/matlab/debugging-code.html
  • nodes= 0x1 struct root =1 values= 1x4 cell CPT= 1x4 cell 这些是我的输入。

标签: matlab indexing bayesian-networks


【解决方案1】:

“索引超出矩阵尺寸”是在您使用超出范围的某个值时发生的。例如,如果我有 N = [1,2,3],那么如果我尝试调用 N(4),那么我将得到“索引超出矩阵维度”。请记住,matlab 中的矩阵从索引 1 开始,而不是 0。

确保在使用之前检查矩阵的大小

size(yourmatrix)

乍一看,您的错误应该在root(rr)nodes(root(rr).values)

【讨论】:

    【解决方案2】:

    root(rr) 的值大于nodes 的元素个数。

    【讨论】:

      【解决方案3】:

      这意味着您指定的索引值大于矩阵分配维度的限制。例如,“for 语句执行 10 个循环,并且您分配的索引值为 301,而您的最大矩阵维度为 300,这将给您一个错误“索引超出矩阵维度”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多