我需要在预定义大小的矩阵上创建一个随机、非重复的坐标集的列表(大小为 n)。
有没有一种快速的方法可以在 Matlab 中生成它?
我最初的想法是创建一个大小为 n 的列表,其大小为(宽度 x 长度)的排列,并将它们转换回 Row 和 Col 值,但在我看来太多了。
谢了,兄弟们
我需要在预定义大小的矩阵上创建一个随机、非重复的坐标集的列表(大小为 n)。
有没有一种快速的方法可以在 Matlab 中生成它?
我最初的想法是创建一个大小为 n 的列表,其大小为(宽度 x 长度)的排列,并将它们转换回 Row 和 Col 值,但在我看来太多了。
谢了,兄弟们
您可以使用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 )
您的想法很好,尽管您甚至不必将线性索引转换回行和列索引,但您可以将线性索引直接转换为二维数组。
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