我有以下矢量 a = 3 3 5 5 20 20 20 4 4 4 2 2 2 10 10 10 6 6 1 1 1
有誰知道如何洗牌這個載體與相同的元素永遠不會分開? 像波紋管 a = 10 10 10 5 5 4 4 4 20 20 20 1 1 1 3 3 2 2 2 6 6
謝謝你,最好的方面...matlab洗牌元素的矢量具有相同的序列相同的數字
1
A
回答
3
您可以使用unique
與accumarray
相結合,創造每個組值放入一個單獨的電池單元的單元陣列。然後你可以洗牌這些元素並將它們重新組合成一個數組。
% Put each group into a separate cell of a cell array
[~, ~, ind] = unique(a);
C = accumarray(ind(:), a(:), [], @(x){x});
% Shuffle it
shuffled = C(randperm(numel(C)));
% Now make it back into a vector
out = cat(1, shuffled{:}).';
% 20 20 20 1 1 1 3 3 10 10 10 5 5 4 4 4 6 6 2 2 2
另一種選擇是使用unique
得到的值,然後計算使每個出現的數目。然後,您可以洗牌的價值和使用repelem
拓展出來的結果
u = unique(a);
counts = histc(a, u);
% Shuffle the values
inds = randperm(numel(u));
% Now expand out the array
out = repelem(u(inds), counts(inds));
+0
非常感謝你的作品太.. – 8727
3
一個非常類似的答案@Suever,使用循環和邏輯矩陣,而不是細胞
a = [3 3 5 5 20 20 20 4 4 4 2 2 2 10 10 10 6 6 1 1 1];
vals = unique(a); %find unique values
vals = vals(randperm(length(vals))); %shuffle vals matrix
aout = []; %initialize output matrix
for ii = 1:length(vals)
aout = [aout a(a==(vals(ii)))]; %add correct number of each value
end
+0
非常感謝你@伊利萊利... – 8727
3
這裏的另一種方法:
a = [3 3 5 5 20 20 20 4 4 4 2 2 2 10 10 10 6 6 1 1 1];
[~, ~, lab] = unique(a);
r = randperm(max(lab));
[~, ind] = sort(r(lab));
result = a(ind);
實施例的結果:
result =
2 2 2 3 3 5 5 20 20 20 4 4 4 10 10 10 1 1 1 6 6
它的工作原理如下:
- 指定獨特標籤的
a
每個元素根據它們的值(這是矢量lab
); - 將
lab
的值應用於自身的隨機雙射(其隨機雙射由r
表示;應用它的結果是r(lab)
); - 排序
r(lab)
並獲得排序的指數(這是ind
); - 將這些指數應用於
a
。
相關問題
- 1. 查找兩個矢量具有相同索引的相同元素
- 2. 隨機洗牌相同元素的排序比較方法
- 3. 洗牌PHP數組不相同的值
- 4. 比較具有不同順序的相同元素的數組
- 5. 如何洗牌,使兩個相同的元素不在一起?
- 6. 洗牌列值,但保持相同的矩陣列順序
- 7. 使兩個向量具有相同數量的元素
- 8. 以不同的順序檢測具有相同元素的行
- 9. 洗牌名單,同時保持相對於相關元素順序
- 10. 具有相同名稱的元素
- 11. 識別具有相同ID的元素
- 12. 按字母順序排列具有相同計數的元素 - Python計數器
- 13. 反序列化具有相同屬性的xml元素
- 14. 將組劃分爲具有相同元素數量的子集
- 15. 獲取相同索引處相同元素的數量
- 16. 具有3個相同大小的矢量的3D圖形的matlab
- 17. 具有列相同的值
- 18. 在matlab中具有相同值的多個元素的列循環
- 19. 具有相同列的相同表的數據建模
- 20. 具有相同基類的多個類的元素向量
- 21. 如何刪除matlab中所有相同元素的列?
- 22. 洗牌矢量的甲板
- 23. 將具有相同類別的多個元素分配給具有相同類別的其他元素
- 24. 一次選擇所有具有相同類別和不同數字的元素
- 25. 洗牌在相同的順序的多個文件
- 26. 兩個不同的元素具有相同的xpath?
- 27. 選擇的元素具有相同的值,但ID不同
- 28. 具有相同值的行(不同列)
- 29. 具有相同的數據
- 30. C++向量中的所有元素指向相同的元素
這些羣體總是保證是唯一的,你不會有:'3 3 5 5 3 3 4 4'? – Suever
是我有這個矩陣firts a = [3 2; 5 2; 20 3; 4 3; 2 3; 10 3; 6 2; 1 3] 我做了一些事情,我的矩陣變成: a = [3 2; 3 2; 5 2; 5 2; 20 3; 20 3; 20 3; 4 3; 4 3; 4 3; 2 3; 2 3; 2 3; 10 3; 10 3; 10 3; 6 2; 6 2; 1 3; 1 3; 1 3] 現在我需要隨機的第一行的值... – 8727