0

ギブスサンプリングアルゴリズムのシミュレーションを行います。次のコードはシミュレーションの一部です。

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)

最初の行は、シミュレーション結果から特定の行を見つけることです。問題は、結果が空行列であるためにこの行が結果にない場合にスミュレーションが停止することです:0 x 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 に答える