Statistics 在索引表达式中脚本的八度无效使用
我尝试使用fitgmdist.m来拟合高斯混合模型。但是,当它调用类gmdistribution的构造函数时,我得到的错误消息如下: 错误:在索引表达式中无效使用script/home/ubuntu/UAVProject_DataStructure/gmdistribution.m 错误:从以下位置调用: 错误:/home/ubuntu/UAVProject\u DataStructure/fitgmdist.m,第505行第7列 错误:/home/ubuntu/UAVProject_DataStructure/computegm.m,第78行第10列 错误:/home/ubuntu/UAVProject\u DataStructure/ImageProcessing.m,第18行第13列 我将两个文件:fitgmdist.m和gmdistribution.m放在当前目录中 我还更改了gmdistribution.m name,以避免与octave库的文件同名,但它不起作用。有人能帮忙吗?谢谢 下面是调用构造函数代码:Statistics 在索引表达式中脚本的八度无效使用,statistics,octave,Statistics,Octave,我尝试使用fitgmdist.m来拟合高斯混合模型。但是,当它调用类gmdistribution的构造函数时,我得到的错误消息如下: 错误:在索引表达式中无效使用script/home/ubuntu/UAVProject_DataStructure/gmdistribution.m 错误:从以下位置调用: 错误:/home/ubuntu/UAVProject\u DataStructure/fitgmdist.m,第505行第7列 错误:/home/ubuntu/UAVProject_DataS
obj=gmdistribution(最佳参数mu,最佳参数Sigma,最佳参数p')代码>
以下是构造函数代码:
########################################
## Constructor
function obj = gmdistribution (mu,sigma,p = [],extra = [])
obj.DistributionName = "gaussian mixture distribution";
obj.mu = mu;
obj.Sigma = sigma;
obj.NumComponents = rows (mu);
obj.NumVariables = columns (mu);
if (isempty (p))
obj.ComponentProportion = ones (1,obj.NumComponents) / obj.NumComponents;
else
if any (p < 0)
error ("gmmdistribution: component weights must be non-negative");
endif
s = sum(p);
if (s == 0)
error ("gmmdistribution: component weights must not be all zero");
elseif (s != 1)
p = p / s;
endif
obj.ComponentProportion = p(:)';
endif
if (length (size (sigma)) == 3)
obj.SharedCovariance = false;
else
obj.SharedCovariance = true;
endif
if (rows (sigma) == 1 && columns (mu) > 1)
obj.DiagonalCovariance = true;
obj.CovarianceType = 'diagonal';
else
obj.DiagonalCovariance = false; ## full
obj.CovarianceType = 'full';
endif
if (!isempty (extra))
obj.AIC = extra.AIC;
obj.BIC = extra.BIC;
obj.Converged = extra.Converged;
obj.NegativeLogLikelihood = extra.NegativeLogLikelihood;
obj.NlogL = extra.NegativeLogLikelihood;
obj.NumIterations = extra.NumIterations;
obj.RegularizationValue = extra.RegularizationValue;
endif
endfunction
########################################
##建造师
函数obj=gmdistribution(mu,sigma,p=[],extra=[]))
obj.DistributionName=“高斯混合分布”;
obj.mu=mu;
目标西格玛=西格玛;
obj.NumComponents=行(mu);
obj.NumVariables=列(mu);
if(isempty(p))
obj.component比例=一(1,obj.NumComponents)/obj.NumComponents;
其他的
如有(p<0.05)
错误(“gmmdistribution:组件权重必须为非负”);
恩迪夫
s=总和(p);
如果(s==0)
错误(“gmmdistribution:组件权重不能全部为零”);
其他(s!=1)
p=p/s;
恩迪夫
obj.componentproporty=p(:)';
恩迪夫
如果(长度(尺寸(西格玛))==3)
obj.SharedConvariance=false;
其他的
obj.SharedConvariance=真;
恩迪夫
如果(行(sigma)==1和列(mu)>1)
obj.对角协方差=真;
对象协方差类型='对角线';
其他的
对角协方差=假;##满的
obj.convariaceType='完整';
恩迪夫
如果(!isempty(额外))
obj.AIC=额外的.AIC;
obj.BIC=额外的.BIC;
obj.收敛=额外收敛;
obj.NegativeLogLikelihood=额外的.NegativeLogLikelihood;
obj.NlogL=额外的负性高血糖;
obj.NumIterations=额外的.NumIterations;
obj.正则化值=额外的.正则化值;
恩迪夫
端功能
我认为您应该创建一个MCVE(尽可能精简您的代码,并确保其他人可以运行您的代码(完整性))。听起来您的类没有正确定义,所以octave没有检测到它是一个类定义,并尝试将其视为一个简单的脚本(然后它抱怨你试图用参数调用它)。你有合适的classdef
和方法吗?