事前定義されたサイズのマトリックス上に、ランダムで繰り返しのない一連の座標の (サイズ n の) リストを作成する必要があります。
Matlab でこれを生成する高速な方法はありますか?
私の最初のアイデアは、(幅 x 長さ) のサイズの順列でサイズ n のリストを作成し、それらを行と列の値に変換することでしたが、私には多すぎるように思えます。
みんなありがとう
事前定義されたサイズのマトリックス上に、ランダムで繰り返しのない一連の座標の (サイズ n の) リストを作成する必要があります。
Matlab でこれを生成する高速な方法はありますか?
私の最初のアイデアは、(幅 x 長さ) のサイズの順列でサイズ n のリストを作成し、それらを行と列の値に変換することでしたが、私には多すぎるように思えます。
みんなありがとう
を使用randperm
して線形インデックスを生成し、必要に応じて を使用して [row,col] に変換できますind2sub
。
x = rand(7,9);
n = 20;
ndx = randperm(numel(x), n);
[row,col] = ind2sub(size(x), ndx);
が行列の要素数よりも少ない限り、n
これは単純です。
% A is the matrix to be sampled
% N is the number of coordinate pairs you want
numInMat = numel(A);
% sample from 1:N without replacement
ind = randperm(numInMat, N);
% convert ind to Row,Col pairs
[r, c] = ind2sub( size(A), ind )
あなたのアイデアは良いものですが、線形インデックスを行インデックスと列インデックスに変換する必要さえありませんが、線形インデックスを直接 2D 配列に変換できます。
idx = randperm(prod(size(data)))
data はあなたの行列です。これにより、1 から までのランダムな整数のベクトルが生成されprod(size(data))
ます。つまり、要素ごとに 1 つのインデックスが生成されます。
例えば
n = 3;
data = magic(n);
idx = randperm(prod(size(data)));
reshape(data(idx), size(data)) %this gives you your randomly indexed data matrix back