5

說,我們有以下的隨機矩陣:Matlab的添加行和列的優雅

1 2 3 4 
5 6 7 8 
9 8 7 6 
5 4 3 2 

我想將它轉變成如下:

1 0 2 0 3 0 4 0 
0 0 0 0 0 0 0 0 
5 0 6 0 7 0 8 0 
0 0 0 0 0 0 0 0 
9 0 8 0 7 0 6 0 
0 0 0 0 0 0 0 0 
5 0 4 0 3 0 2 0 
0 0 0 0 0 0 0 0 

出於某種原因,我不能用mathjax格式,所以看起來有點可怕,對此抱歉。要點是,我想在我的當前行和列之間添加行和零列,以便將其大小增加2倍。

我想出了下面的代碼,但它只適用於非常小的矩陣,如果我用它在一個大的圖像,它不能完成由於內存限制問題。

clear all 

I=imread('image.png'); 
I=rgb2gray(I); 

B=zeros(2*size(I)); 

[x, y]=find(-inf<I<inf); 

xy=[x,y]; 
nxy=xy; 

%coord change 
nxy=2*xy-1; 

B(nxy(:,1),nxy(:,2))=I(xy(:,1),xy(:,2)); 

我預計速度會很快,因爲它完全採用了maltlab函數的矢量化,但它失敗了。有沒有其他優雅的方式來做到這一點?

+0

爲了您的信息,mathjax不只是因爲堆棧溢出不支持工作吧:)這是有時會錯過,但是很多會大量使用它的問題無論如何都是無關緊要的。 (你的不是。) –

回答

3

如果你看看你的索引向量,這是類似I([1 1 2 2] ,[1 2 1 2] ); 2x2矩陣,這意味着你索引每行和兩列。正確的解決方案是B(1:2:end,1:2:end)=I;它索引每第二行和每第二列。

+0

就是這樣。乾杯! – Jimodium

1

這可以通過一個襯墊來也做了,說你原來的矩陣稱爲A,然後

kron(A,[1,0;0,0]) 
+0

這應該是解決方案的首選,至少對於2d陣列來說。 'kron'完全符合要求,而且更具概括性。 – Derek