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

问题描述 投票:0回答:3

我是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
matlab indexing bayesian-networks
3个回答
2
投票

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

在使用矩阵之前,请务必检查矩阵的大小

size(yourmatrix)

一目了然,你的错误应该是root(rr)nodes(root(rr).values)


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.