我有一个矩阵,想要对其中的元素进行随机排序。
x=[1 2 5 4 6 ]
洗牌后的结果(类似这样)
x=[2 4 6 5 1]
Matlab是否有相应的函数?在PHP中,array_shuffle可以实现此功能。
我有一个矩阵,想要对其中的元素进行随机排序。
x=[1 2 5 4 6 ]
洗牌后的结果(类似这样)
x=[2 4 6 5 1]
Matlab是否有相应的函数?在PHP中,array_shuffle可以实现此功能。
使用randperm
获得打乱后的索引。
idx = randperm(length(x));
使用索引获取洗牌向量
xperm = x(idx);
randperm
的替代方法,您还可以使用统计工具箱中的 randsample
。
请注意,默认情况下是“无放回”的。因此,如果将
y = randsample(n,k)
返回一个大小为k
-by-1
的向量y
,其中的值是从整数1
到n
中随机抽取的,且不会重复。
k
设置为 x
的长度,那么它等价于对向量进行随机排列。例如:x = 1:5;
randsample(x,length(x))
%ans =
% 4 5 3 1 2
我更喜欢这种方式,因为它可以轻松地扩展到不同的用途。例如,要从 x
中随机抽取3个元素(就像从有限物品的桶中抽取),你只需使用 randsample(x,3)
。同样,如果您希望随机产生由 x
的元素组成的字母表中的3个数字,并允许重复,则需要使用 randsample(x,3,true)
。