【问题标题】:Replacing an entire matrix block (arbitrary size) in Matlab在 Matlab 中替换整个矩阵块(任意大小)
【发布时间】:2013-02-24 18:51:53
【问题描述】:

我需要用

替换矩阵的最后 n+2
myeye = eye(n+2, (n+1)^2); 

除了元素明智之外,还有其他方法吗?

基本上,我想做这样的事情

myMatrix((n+1)^2-(n+1):end) = myeye; %the index is just the last n+2 rows

这当然不合法,但这是我想做的。

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    你可以这样做:

     myMatrix((end - size(myeye, 1) + 1):end, :) = myeye(:, 1:size(myMatrix, 2))
    

    注意使用关键字end获取最后一行索引。

    还请注意,由于myeye 基本上是一个 n×n 单位矩阵,它与一个 zeros 矩阵水平连接,因此您可以通过更简单的方式实现相同的效果:

     myMatrix((end - n - 1):end, :) = eye(n + 2, size(myMatrix, 2))
    

    【讨论】:

      【解决方案2】:
      a=randi(10,[30 7]);
      aNew=a;
      n=1;
      if (n+1)^2>=size(aNew,2)
         nRows=size(aNew,2);
      else
         nRows=(n+1)^2;
      end
      aNew(size(a,1)-(n+1):end,1:nRows)=eye(n+2, (n+1)^2); %This is where you actually replace a block.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-09
        • 2010-10-22
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多