2012-02-01 18 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 ]

私はダブルforループを使用しようとしていましたが、うまくいきましたが、それは悪い考えのように思えます。

誰でも上記のタスクを実行するための良いアイデアがありますか?ここで

+0

はすべてスカラー、B、C、D、E、およびFです使用するには?またはそれらは行列であることができるか? – Pursuit

+0

彼らはすべてスカラーです – atlantis

答えて

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

これはかなり良いです。 'translose(x)'を 'x 'に置き換え、最後の行を' [j(:) reshape(x'、[]、1)]と書き換えることで、読みやすくすることができます。 – Pursuit

+0

@追求、アドバイスありがとう。私はタグよりも転置するのが好きです。なぜなら、人がそれを読むとき、彼はそれを容易に気付くからです。あなたが言ったもう一つのことは100%正解です - 私は更新します。 –

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)] 
関連する問題