function parameter=CPTValues(index,sizes,CPTS)
m=size(index,2);
n=size(sizes,2);
for i=m:1
number=(round(index(1,i)-1))*arraySizes(sizes,n);
n=n-1;
end
parameter=CPTS(round(number));
end
function arraySize=arraySizes(array,length)
count=1;
if (length>=2)
for i=length-1:1
count=count*round(array(1,i));
end
arraySize=round(count);
else
arraySize=1;
end
end
大家好,我试图在Matlab中编写一个函数来引用多维矩阵中的值。当我有这个函数时,我试图将index=[2,1,2],sizes=[3,2,2]BP(我已经定义的三维矩阵(传递到我的CPTValue函数中,我得到错误:
"Undefined function or variable "number" "
这里有人能帮我吗,非常感谢~
这是CPT的一个例子%P_θ(HD|CH,BP,G(
HD=zeros(2,2,2,2);
for i=1:m
for ch=1:2
for bp=1:2
for g=1:2
for hd=1:2
if(Data(i,5)==ch&&Data(i,4)==bp&&Data(i,2)==g&&Data(i,9)==hd)
HD(ch,bp,g,hd)=HD(ch,bp,g,hd)+1;
end
end
end
end
end
end
PCBG=zeros(2,2,2);
for i=1:m
for ch=1:2
for bp=1:2
for g=1:2
if(Data(i,5)==ch&&Data(i,4)==bp&&Data(i,2)==g)
PCBG(ch,bp,g)=PCBG(ch,bp,g)+1;
end
end
end
end
end
for ch=1:2
for bp=1:2
for g=1:2
HD(ch,bp,g,:)=HD(ch,bp,g,:)/PCBG(ch,bp,g);
end
end
end
for从i=m:1
开始,但matlab不理解i
必须减少而不是增加!将for行更改为i=m:-1:1
,它就会这样做。
第2版:
它对我来说还可以:
%Create random BP of sizes=[3,2,2]
BP=rand(sizes)
BP(:,:,1) =
0.9572 0.1419
0.4854 0.4218
0.8003 0.9157
BP(:,:,2) =
0.7922 0.0357
0.9595 0.8491
0.6557 0.9340
%Set an index to look
index=[2,1,2];
%try the function
CTPValues(index,sizes,BP)
ans =
0.9572
%try indexing the matrix directly
BP(2,1,2)
ans =
0.9595