【问题标题】:Octave/Matlab: change value at certain position in matixOctave / Matlab:在矩阵中的某个位置更改值
【发布时间】:2013-05-04 03:38:06
【问题描述】:

我有一个向量,它告诉我必须在矩阵中的哪个位置用数据更改某些位和矩阵。例如:

a = [2
     0
     4]

data = [ 1 0 1 0;
         0 0 1 0
         1 1 1 1]

a 告诉我,我必须更改(从 1 翻转到 0)以下值:

  • 第一行第二列
  • 第三行第四列
  • 第二排没有变化!!!

结果是

data2 = [ 1 1 1 0;
          0 0 1 0
          1 1 1 0]

如何仅使用矢量运算来做到这一点?我不想使用 for 循环,因为它们太慢了。

【问题讨论】:

    标签: matlab octave vectorization


    【解决方案1】:

    这是一种方法:

       data2=data;
       ind=sub2ind(size(data),find(a),a(a>0));
       data2(ind)=~data(ind) 
    

    【讨论】:

    • 您好,谢谢您的回答。我尝试了您的代码,但似乎仍然缺少一些东西。如果我在示例数据上使用该代码,我会得到以下结果:data2 = [1 1 1 1; 0 0 1 0; 1 0 1 0],所以它会翻转一些额外的位。
    • 是的,我明白为什么会这样了,我使用线性索引没有太小心。请参阅我的修改以进行修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多