在Matlab中替换整个矩阵块(任意大小)

时间:2013-03-09 04:59:51

标签: matlab matrix

我需要用

替换矩阵的最后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

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

2 个答案:

答案 0 :(得分:1)

你可以这样做:

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

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

另请注意,由于myeye基本上是一个n-by-n单位矩阵,与零矩阵水平连接,您可以更简单的方式实现相同的效果:

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

答案 1 :(得分:0)

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.