2012-02-01 95 views
3

我有一個矩陣X e.g = [a b; c d; e f]使用索引壓扁MATLAB中的矩陣

我需要創建另一個矩陣,列出矩陣的索引位置和值。

例如輸出是E = [ 1 1 a ; 1 2 b ; 2 1 c ; 2 2 d ; 3 1 e ; 3 2 f ]

我一直在嘗試使用雙循環,但即使它確實工作,這聽起來像一個壞主意。

那麼任何人都可以有更好的主意來執行上述任務嗎?

+0

是A,B,C,d,e和f所有標量?或者他們可以是矩陣? – Pursuit 2012-02-01 19:43:13

+0

他們都是標量 – atlantis 2012-02-03 05:03:26

回答

2

這是我能想到的(假設a,b,c,d,e,f都是標量)

x = [1 2;3 4;5 6]; 
[i,j]=ind2sub(size(transpose(x)), 1:numel(x)); 
[j(:) i(:) reshape(transpose(x),[],1)] 

不過,我有一種感覺,有可能是一個答案是更優雅的最愚蠢的事情。

+0

這很不錯。你可以用'x''替換'transpose(x)'來提高可讀性,並且把最後一行改寫爲'[j(:) i(:) reshape(x',[],1)]' – Pursuit 2012-02-01 19:57:23

+0

@追求,感謝您的建議。我喜歡轉錄而不是標籤,因爲當讀一個標籤時他很容易注意到它。你說的另一件事是100%正確 - 我會更新。 – 2012-02-01 20:12:25

1

沒有錯@安德烈的回答,而是因爲我喜歡找理由使用kron :)

A = [1 2; 3 4; 5 6]; 

[nrows, ncols] = size(A); 

M = [kron([1 : nrows]', ones(ncols, 1))... 
    kron(ones(nrows, 1), [1 : ncols]')... 
    reshape(A', [], 1)]