为什么MATLAB显示“索引超出矩阵维度”。错误

时间:2017-12-17 13:41:47

标签: matlab indexing bayesian-networks

我是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

3 个答案:

答案 0 :(得分:2)

当您处理超出范围的某个值时,“索引超出矩阵维度”。例如,如果我有N = [1,2,3],那么如果我试图调用N(4),那么我将得到'Index超过矩阵维'。请记住,matlab中的矩阵从索引1开始,而不是从0开始。

确保在使用

进行处理之前检查矩阵的大小
size(yourmatrix)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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