1

我需要在预定义大小的矩阵上创建一个随机、非重复的坐标集的列表(大小为 n)。

有没有一种快速的方法可以在 Matlab 中生成它?

我最初的想法是创建一个大小为 n 的列表,其大小为(宽度 x 长度)的排列,并将它们转换回 Row 和 Col 值,但在我看来太多了。

谢了,兄弟们

4

3 回答 3

3

您可以使用randperm生成线性索引,并在需要时使用 将其转换为 [row,col] ind2sub

x = rand(7,9);
n = 20;
ndx = randperm(numel(x), n);
[row,col] = ind2sub(size(x), ndx);
于 2013-02-22T21:10:35.103 回答
2

只要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 )
于 2013-02-22T21:09:55.593 回答
0

您的想法很好,尽管您甚至不必将线性索引转换回行和列索引,但您可以将线性索引直接转换为二维数组。

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
于 2013-02-22T21:11:28.907 回答