0

最近、Matlab コードを Python コードに変換しようとしています。

必要な変更のほとんどを行いましたが、問題は次の行です。

y(index(m)) = 1-x(index(m));

エラーが発生します:

「関数呼び出しに代入できません」

ただし、このエラーを削除するために再構築する方法がわかりません。

私は周りを見回して、人々は「アイテムを取得する」と「アイテムを設定する」と述べていますが、それらを使用しようとしましたが、それらを機能させることができません(おそらく構造を理解できないため)

完全なコードは次のとおりです。

import numpy

N = 100;
B = N+1;
M = 5e4;
burnin = M;
Niter = 20;
p = ones(B,Niter+1)/B;
hit = zeros(B,1);

for j in range(1,Niter):
    x = double(rand(1,N)>0.5);
    bin_x = 1+sum(x);
    index = ceil(N*rand(1,M+burnin));
    acceptval = rand(1,M+burnin);
    for m in range(1,M+burnin):
        y = x;
        y(index(m)) = 1-x(index(m));
        bin_y = 1+sum(y);

        alpha = min(1, p(bin_x,j)/p(bin_y,j) );
        if acceptval(m)<alpha:
            x = y; bin_x = bin_y;
        end

        if m > burnin: hit(bin_x) = hit(bin_x)+1; end
    end

    pnew = p[:,j];
    for b in range(1,B-1):
        if (hit(b+1)*hit(b) == 0):
            pnew(b+1) = pnew(b)*(p(b+1,j)/p(b,j));
        else:
            g(b,j) = hit(b+1)*hit(b) / (hit(b+1)+hit(b));
            g_hat(b) = g(b,j)/sum(g(b,arange(1,j)));
            pnew(b+1) = pnew(b)*(p(b+1,j)/p(b,j))+((hit(b+1)/hit(b))^g_hat(b));
        end
    end
    p[:,j+1] = pnew/sum(pnew);
    hit[:] = 0;
end

前もって感謝します

4

1 に答える 1