我需要在Matlab中實現以下算法。Matlab:如何隨機置換和逆置換矢量
- 假設
A = [3 4 1 9 5]
- 置換
A
隨機說,A = [5 1 4 3 9]
- 添加2〜前兩個元素:
A = [7 3 4 3 9]
- 置換一回,
A = [3 4 3 9 7]
我使用randperm()
功能置換:
index = randperm(numel(A));
A = A(index);
但問題是如何將排列A
更改爲第一個排列後將其置換回來。
我需要在Matlab中實現以下算法。Matlab:如何隨機置換和逆置換矢量
A = [3 4 1 9 5]
A
隨機說,A = [5 1 4 3 9]
A = [7 3 4 3 9]
A = [3 4 3 9 7]
我使用randperm()
功能置換:
index = randperm(numel(A));
A = A(index);
但問題是如何將排列A
更改爲第一個排列後將其置換回來。
實際上你可以放索引的左側:
A(index) = A;
;-)
試試這個
index = randperm(numel(A));
nums=1:length(A)
return_index=nums(index)
temp = A(index);
temp(1:2)=temp(1:2)+2;
A(nums)=temp(return_index);
是啊!它的工作。謝謝你的回覆 –
你知道'nums(index)'和'index'完全一樣(因爲nums = 1:length(A)')對嗎?就像「A(nums)」與「A」本身一樣。這似乎過於複雜:s –
因此,基本上,你只是想添加2比2矢量A
的隨機元素。無需排列,只需選取兩個隨機索引即可。在最新版本的MATLAB randperm的兩個參數:
p = randperm(n,k)
返回包含隨機選擇的從1到n
包容k
唯一整數的行向量。
,那麼你可以使用:
idx = randperm(numel(A),2);
A(idx)=A(idx) + 2;
在舊版本中,你可以使用:
idx = randperm(numel(A));
idx = idx(1:2);
A(idx)=A(idx) + 2;
啊!這個也是。 Matlab簡直太棒了 –
啊!這很簡單。謝謝。它的運作良好 –
爲什麼這樣工作? –