设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. 如何随机替换对称矩阵的元素?
- 2. 在矩阵替代零个元素与随机整数
- 3. R:替换随机矩阵的“非对角线”元素
- 4. 用矩阵替换矩阵元素
- 5. 翻转矩阵中的随机元素
- 6. 矩阵的Matlab随机元素
- 7. 如何处置矩阵的零元素
- 8. 替换矩阵行中的第一个零元素,
- 9. 随机用每个现有值替换矩阵中元素的百分比
- 10. 从矩阵中替换元素(Haskell)
- 11. 替换由另一个矩阵索引的矩阵元素
- 12. 为矩阵上的随机元素设置的值
- 13. 如何用MATLAB中的另一个矩阵替换矩阵的元素?
- 14. “矩阵”与随机元素,如何在同一列对齐相同的元素?
- 15. 如何替换矩阵的指定列中的元素?
- 16. 如何替换矩阵的下/上三角形元素?
- 17. 矩阵的非零元素的逆
- 18. 生成一个具有N个非零元素的随机稀疏矩阵
- 19. 从稀疏矩阵中绘制一个随机的非零元素
- 20. 如何高效地替换3D矩阵的第一列中的元素
- 21. 矩阵与元素的矩阵元素
- 22. 稀疏矩阵的非零元素
- 23. 转换矩阵的元素为整数
- 24. 用平方置换子矩阵替换基矩阵中的元素
- 25. 如何使用逻辑索引替换矩阵元素?
- 26. 矩阵的随机交换列:Matlab的
- 27. 如何用随机选择的数组元素替换子串?
- 28. 如何将稀疏矩阵转换为索引矩阵和非零元素的值
- 29. 随机化元素位置到阵列
- 30. 检查本征::矩阵的任何元素为从零
正好是10%或10大概%? – 2012-08-15 19:45:40
@HighPerformanceMark准确地说是10%。我只能使它小于或等于,我想它完全是10%。 – SJL 2012-08-15 19:53:53