matlab中如何使一个数组变成一样长度不一样数字的数组

比方说我有个数组为a=[1 2 3],现在要将他们所有都变成从1到3的一个随机数,但是不能与原数相同,比方说a(1)不能等于1, a(2)不能等于2,a(3)不能等于3

如果数组长度不大,可采用循环的方式,每次用 randperm 产生随机排列,然后判断是否与原数相同,直到满足要求为止。

 

参考代码:

a = [1 2 3];
n = length(a);
while true
    p = randperm(n);
    if all(p-(1:n)), break, end
end
b = a(p)

从直觉上判断,如果数组元素比较多,这种方式的效率可能会比较低,需要研究更好的做法。不过从实际的测试看,效率似乎并没有受很大影响。你可以试试看,如果确实需要改进再说。

追问

你好,谢谢你的回答,不过我忘了说了,这个是要解决一个多元素的数组所以最好不要用到循环,能想到办法么?

追答

请问“多元素的数组”是什么意思?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-12
a=[1 2 3];
b=a;
while sum(b==a)
b=randsample(b,3);
end
b追问

你好,谢谢你的回答,不过我忘了说了,这个是要解决一个多元素的数组所以最好不要用到循环,能想到办法么?

追答

我这就是最佳方案。你可以比速度。

相似回答