Matlab - 为矩阵生成随机坐标

时间:2013-02-22 20:56:46

标签: matlab random matrix coordinates permutation

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

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

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

谢谢, 盖

3 个答案:

答案 0 :(得分:3)

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

x = rand(7,9);
n = 20;
ndx = randperm(numel(x), n);
[row,col] = ind2sub(size(x), ndx);

答案 1 :(得分: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 )

答案 2 :(得分:0)

您的想法很好,虽然您甚至不必将线性索引转换回行和列索引,但您可以直接将索引直接转换为2D数组。

idx = randperm(prod(size(data)))

其中数据是您的矩阵。这将生成1和prod(size(data))之间的随机整数向量,即每个元素的一个索引。

e.g。

n = 3;
data = magic(n);
idx = randperm(prod(size(data)));
reshape(data(idx), size(data)) %this gives you your randomly indexed data matrix back