設C是一個40×40矩陣,在對角的零。我如何隨機用零替換矩陣中10%的元素?如何隨機地替換爲矩陣元素的10%到零
回答
準確的10%的元件代替由0這樣的事可能會令你滿意:
mask = [ones(1,1440),zeros(1,160)];
mask = reshape(mask(randperm(1600)),[40,40]);
c.*mask
如果大概10%是可以接受的,儘量
c.*(randi(10,40)<=9)
我想你可以計算這些了,如果沒有發表評論。
非常感謝!我明白了你的想法,但我忽略了矩陣中對角線條目爲零的觀點。因此,它會在每次運行中生成不同數量的零條目。 – SJL 2012-08-15 20:33:48
相反@HighPerformanceMark的面具*陣法,我只想指數矩陣本身:
data=rand(10);
N = numel(data);
data(randperm(N,floor(N/10))) = 0;
我認爲最快的方法是與標量分配組合使用邏輯索引:
C(rand(size(C)) < 0.1) = 0;
但是當你指定了不會給你確切地%。
的精確解決方案是
nC = numel(C);
[~, p] = sort(rand(1, nC));
C(p <= nC/10) = 0;
其等同於randperm
而不randperm()
在Matlab R2010的開銷和更早版本。
它不是那麼快,你還是要產生'nC'隨機數,排序的(所有的),然後用'NC/10'比較得到最終的邏輯。 'randperm'本身約快4-10倍... – 2012-08-17 16:15:30
@ GuntherStruyf在matlab命令提示符處鍵入'edit randperm'。這是完全相同的代碼。 – 2012-08-17 16:36:45
已經做了,在R2011b,randperm是內置的(可能這就是爲什麼它的速度更快) – 2012-08-17 16:38:46
- 1. R:替換隨機矩陣的「非對角線」元素
- 2. 用矩陣替換矩陣元素
- 3. 矩陣的Matlab隨機元素
- 4. 替換由另一個矩陣索引的矩陣元素
- 5. 爲矩陣上的隨機元素設置的值
- 6. 如何用MATLAB中的另一個矩陣替換矩陣的元素?
- 7. 如何替換矩陣的指定列中的元素?
- 8. 矩陣的非零元素的逆
- 9. 從稀疏矩陣中繪製一個隨機的非零元素
- 10. 生成一個具有N個非零元素的隨機稀疏矩陣
- 11. 轉換矩陣的元素爲整數
- 12. 用平方置換子矩陣替換基矩陣中的元素
- 13. 如何用隨機選擇的數組元素替換子串?
- 14. 如何將稀疏矩陣轉換爲索引矩陣和非零元素的值
- 15. 隨機化元素位置到陣列
- 16. 檢查本徵::矩陣的任何元素爲從零
- 17. 基於另一個矩陣(矩陣包)的稀疏矩陣的清零元素
- 18. Numpy:如何隨機地將一個矩陣分成n個不同的矩陣
- 19. 生成具有獨立元素的隨機矩陣
- 20. 如何刪除3D矩陣中的零元素?
- 21. 如何找到三個矩陣的每個最大元素作爲新矩陣?
- 22. Jama如何隨機播放矩陣?
- 23. 如何生成對稱隨機矩陣?
- 24. 矩陣元素
- 25. 從邏輯矩陣中選擇隨機'1'元素
- 26. Matlab使用隨機元素生成矩陣
- 27. 使用MATLAB以概率將矩陣的元素設置爲零
- 28. matlab:查找和替換單元格陣列中的矩陣元素
- 29. 替換python中特定座標的矩陣元素
- 30. 在java中替換更高維的矩陣元素
正好是10%或10大概%? – 2012-08-15 19:45:40
@HighPerformanceMark準確地說是10%。我只能使它小於或等於,我想它完全是10%。 – SJL 2012-08-15 19:53:53