0

我对 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 函数并且模拟停止了!!我想让模拟忽略结果并继续下一步

4

1 回答 1

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;

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

于 2013-02-10T13:33:20.180 回答