我是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
答案 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,这将给出错误"指数超过矩阵维度"