2015-12-03 164 views
1

我確信這個問題必須在其他地方回答,但我似乎無法找到答案。行和列索引的返回矩陣

給定一個矩陣M,什麼是返回兩個矩陣分別含有M

的元素

例如的行和列索引的最有效/簡潔的方式

M = [1 5 ; NaN 2] 

,我想

MRow = [1 1; 2 2] 
MCol = [1 2; 1 2] 

一種方式是做

[MRow, MCol] = find(ones(size(M))) 
MRow = reshape(MRow, size(M)) 
MCol = reshape(MCol, size(M)) 

但這似乎並沒有特別的簡潔,也沒有效率。

回答

3

這實際上相當於在行和列索引的可能值上構建規則網格。這可以使用meshgrid來實現,這比使用find更有效,因爲它避免了構建一個矩陣並試圖「找到」基本上已知的結果。

M = [1 5 ; NaN 2]; 

[nRows, nCols] = size(M); 
[MCol, MRow] = meshgrid(1:nCols, 1:nRows); 
+0

在這種情況下使用'find'將代碼風格上較差。 –

+1

@MatthewGunn好耶,真的。因爲你實際上並不需要*找到任何東西......)在答案中澄清了這一點。 – mikkola

3

使用meshgrid

[mcol, mrow] = meshgrid(1:size(M,2),1:size(M,1))