如何在使用matlab模拟gibbs采样时使用isempty函数?

时间:2013-02-09 22:19:31

标签: matlab simulation

我对gibbs采样算法进行了模拟,下面的代码是模拟的一部分:

mamodel=@(x)find(ismember(x(:,2:end),[1 0 0 0 0],'rows'))

if ~isempty(a)
    macount=a(mamodel(a),:)
else
    macount=zeros(1,size(a,2))
end

h(i,:)=(macount)

第一行是从模拟结果中找到某一行问题是当这行不在结果中时,smulation停止因为结果是Empty matrix:0-by-6,我试过isempty函数而且模拟停! 我想让模拟忽略结果并继续下一步

1 个答案:

答案 0 :(得分:0)

根据我的理解,您的问题会在h(i, :) = (macount)行中出现,因为维度不一致。

考虑到,使用isempty您要检查的是变量a是否为空,但是您在其中搜索给定的行,然后您可以找到自己的情况变量a不为空,但它不包含您要搜索的行,然后您获得Emtpy matrix: 0-by-1

因此,如果我理解你的问题,如果你小心检查你检查的内容以及你检查它们,你应该没事。

如果您首先尝试在矩阵a中找到结果,然后检查结果的空白,则可以避免出现空变量问题。在下面的一段代码中,完成了(通过对变量元素数量的测试来改变~isempty,但这只是一个小的改变,至少在这种情况下):

macount = a(mamodel(a), :);
if numel(macount) == 0
    macount = zeros(1, size(a, 2));
end
h(i, :) = macount;

我不知道这是否适合您的模拟,但它应该解决尺寸问题。