我需要在预定义大小的矩阵上创建一组(大小为n)随机,非重复坐标的列表。
有没有一种快速的方法可以在Matlab中生成它?
我最初的想法是创建一个大小为n的列表,其排列大小为(宽度x长度),并将它们转换回Row和Col值,但在我看来太多了。
谢谢, 盖
答案 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