미리 정의 된 크기의 행렬에 임의의 반복되지 않는 좌표 집합 목록 (크기 n)을 만들어야합니다.Matlab - 행렬의 랜덤 좌표 생성
Matlab에서이를 생성하는 빠른 방법이 있습니까?
초기 생각은 (너비 x 길이) 크기의 순열을 사용하여 크기 n의 목록을 작성한 다음 행 및 열 값으로 다시 변환하는 것이었지만 너무 많이 보였다.
감사합니다, 가이
미리 정의 된 크기의 행렬에 임의의 반복되지 않는 좌표 집합 목록 (크기 n)을 만들어야합니다.Matlab - 행렬의 랜덤 좌표 생성
Matlab에서이를 생성하는 빠른 방법이 있습니까?
초기 생각은 (너비 x 길이) 크기의 순열을 사용하여 크기 n의 목록을 작성한 다음 행 및 열 값으로 다시 변환하는 것이었지만 너무 많이 보였다.
감사합니다, 가이
randperm
를 사용하여 변환 할 수 있습니다
to [row, col]로 변경하십시오. ind2sub
. 당신도 행 및 COL 지수에 다시 선형 인덱스를 변환 할 필요는 없지만
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)
당신의 생각은, 좋은, 당신은 직접 2 차원 배열로 선형 인덱싱을 할 수 있습니다.
idx = randperm(prod(size(data)))
여기서 데이터는 매트릭스입니다. 그러면 1과 prod(size(data))
사이의 임의의 정수 벡터, 즉 각 요소에 대해 하나의 색인이 생성됩니다.
n = 3;
data = magic(n);
idx = randperm(prod(size(data)));
reshape(data(idx), size(data)) %this gives you your randomly indexed data matrix back
'n'이 매트릭스의 요소 수보다 큰 경우 어떻게됩니까? 그런 다음 반복을 허용 할 수 있습니까? – slayton
프로젝트를 git에 업로드했습니다 : https://github.com/guywald/allele_fixation –