我想以給定的概率在矩陣中進行一些更改。
假設我有 [1 0 1; 1 1 0;0 0 1]
我想以 a 的概率將位 1 翻轉到位 0,并以 b 的概率將位 0 ??翻轉到位 1。然后用新值創建一個新的 3x3 矩陣。
uj5u.com熱心網友回復:
一種解決方案,基本上是@bla 建議的實作:
% Random example input
x = rand(3)>0.5
% A vector with p(b) and p(a)
p = [0.1,0.2] % [p(b), p(a)]
% We map each value (0,1) with its probability and we check if it needs to be flipped.
is_flipped = p(x 1) > rand(3)
% Flip the value
res = xor(x,is_flipped)
uj5u.com熱心網友回復:
一些提示:
所以可以說翻轉是1,沒有翻轉是0。翻轉的邏輯運算是xor(如果你從未聽說過,請查看真值表)。
a可以使用 來得出的概率Pa=rand(N,1)<=a,但這是針對大小為 Nx1 的向量。在您的情況下,您需要分別對1and進行操作0。
uj5u.com熱心網友回復:
我想出了一個解決方案,希望這對其他人有所幫助。
a = [1 0 0 ; 1 1 1 ; 0 0 0];
row = 3;
column = 3;
prob1to0 = 0.7; %probability that bit1 flips
prob0to1 = 0.1; %probability that bit0 flips
flip1to0 = rand(3) <= prob1to0;
flip0to1 = rand(3) <= prob0to1;
a_new = zeros(3,3);
for m=1:3
for n=1:3
if (a(m,n) == 1) && (flip1to0(m,n)==1)
a_new(m,n)=a(m,n)-1;
elseif (a(m,n) == 0) && (flip0to1(m,n) == 1)
a_new(m,n)=a(m,n) 1;
else
a_new(m,n)=a(m,n);
end
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/493246.html
