0

行列/ベクトルの各値のx%を新しい値に置き換え、変更する要素をランダムに選択するための賢明な方法はありますか?つまり、Aで、値の20%(既存の値ごとに1要素)を値5に変更したい場合、 Aの既存の値ごとに5つの要素のそれぞれが同じ確率で変更されるようにするにはどうすればよいですか。新しい値(例:5)に?上記のタスクを完了する方法についてのガイダンスをいただければ幸いです。

よろしくお願いします。

% Example Matrix
% M = 5;
% N = 5;
% A = zeros(M, N);
A = [0 0 0 0 0;
     1 1 1 1 1;
     2 2 2 2 2;
     3 3 3 3 3;
     4 4 4 4 4];   

% Example Matrix with 20% of elements per value replaced with the value '5'
A = [0 0 5 0 0;
     1 5 1 1 1;
     2 5 2 2 2;
     3 3 3 3 5;
     4 4 5 4 4];  
4

2 に答える 2

0

ここここからの情報を使って、私は自分の目的を達成することができました。以下のコードは、マトリックス内の各値のx%を新しい値に置き換え、マトリックス内のその値内の位置をランダム化します。

M = 5;
N = 5;
A = zeros(M, N);
PC = 20; % percent to change
nCells = round(100/PC); % # of cells to replace with new value
A = [0 0 0 0 0;
     1 1 1 1 1;
     2 2 2 2 2;
     3 3 3 3 3;
     4 4 4 4 4]; 
A2 = A+1; % Pad the cell values for calculations (bc of zero)
newvalue = 6;
a=hist(A2(:),5);% determine qty of each value
for i=1:5
    % find 1st instance of each value and convert to newvalue
    A2(find(A2==i,round(a(i)/nCells)))=newvalue;
end;
out = A2-1; % remove padding
[~,idx] = sort(rand(M,N),2); % convert column indices into linear indices
idx = (idx-1)*M + ndgrid(1:M,1:N); %rearrange each newvalue to be random
A = out;
A(:) = A(idx);
于 2012-11-27T21:42:48.803 に答える
0

次のように、論理配列と生成された乱数を使用してみてください。

vals_to_change=rand(size(A,1),size(A,2))<p;
A(vals_to_change)=rand(sum(vals_to_change),1);
于 2012-11-18T16:34:33.253 に答える