【问题标题】:Changing (Corrupt) matrix value in Matlab randomly在 Matlab 中随机更改(损坏)矩阵值
【发布时间】:2014-05-04 13:35:33
【问题描述】:

我有如下矩阵;

x1(1,:)=[0.1,0.9,0.9,0.9,0.1, 0.9,0.1,0.9,0.1,0.9, 0.9,0.9,0.1,0.9,0.9, 0.9,0.1,0.9,0.1,0.9, 0.1,0.9,0.9,0.9,0.1];

我想用给定的特定百分比破坏该模式。例如,如果我想破坏模式 %8 则必须更改矩阵的 2 个元素(如果元素为 0.9,则应为 0.1,反之亦然)。

对于矩阵自爆;

x(:,1)=[-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,1,
   -1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,1,1,1,-1,-1,-1,1,-1,-1,-1,1,
    -1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,-1,1]';

这个功能我试过了,效果很好。

function Ret=corrupt(Inx,per)

    I_SIZE=length(Inx);
    N_COR=floor(I_SIZE*per/100);

    I_INX=randperm(I_SIZE);
    C_INX=I_INX(1:N_COR);
    Inx(C_INX)= -1 * Inx(C_INX);

    Ret=Inx;

如何对 0.1 和 0.9 进行更改?

【问题讨论】:

  • 太棒了。你试过什么?
  • 我写了我尝试过的。
  • 我认为您需要这样做 - Inx(C_INX)= 1-Inx(C_INX);,其余代码保持不变。
  • 谢谢,成功了。

标签: matlab random matrix


【解决方案1】:

使用randsample 可能更容易:

C_INX = randsample(1:I_SIZE, N_COR);
Inx(C_INX) = 1-Inx(C_INX);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2012-04-05
    • 2020-04-20
    • 2013-01-02
    相关资源
    最近更新 更多