2009-08-07 5 views
11

私はこのマトリックスを持っているとします:{{1,2}、{2,3}}、私はむしろ{{4,1,2}、{5,2,3}}を持っています。つまり、私は行列に列を追加しました。それを行う簡単な方法はありますか?行列を行列に追加する方法は?

私の最高の提案はこれです:

PrependColumn[vector_List, matrix_List] := 
Outer[Prepend[#1, #2] &, matrix, vector, 1] 

しかし、それは、コードを難読化し、常により多くのコードをロードする必要があり。これは何とか組み込まれていないのですか?

答えて

11

はMathematicaの6で導入された少なくとも難読化ソリューションは

matrix = {{1, 2}, {2, 3}} 
vector = {{4}, {5}} 

[email protected]{{vector, matrix}} 

素敵なトリックである必要があります。

7

私は少なくともあいまいでこれを行うための次のような方法があると思い:(私はそれをすべて使用して一般的に

PrependColumn[vector_List, matrix_List] := MapThread[Prepend, {matrix, vector}]; 

MapThreadは、あなたがこのようなタスクのために最も頻繁に使用します機能ですアレイにラベルを追加するときには、Gridで整形することができます)、Prepend[#1, #2]&の代わりにPrependを使用すると、はっきりと明瞭になります。 ArrayFlatten以来

PrependColumn[vector_List, matrix_List] := 
    Transpose[Prepend[Transpose[matrix], vector]] 
7

は、私が最も一般的な方法は、転置先頭に追加し、再度転置することであると考えてい任意の行列ブロックを0に置き換えると、正しいサイズのブロックがゼロになります。

0

...すばらしいことに...素敵な方法...配列RandomReal[100,{10^8,5}]のさまざまなメソッドのテストから列を追加または前に追加する最速の方法です(子供、自宅でこれを試してはいけません。速度とメモリのために作られた配列で、このサイズはコンピュータを掛けることが保証されています) ...これはAppend[tmp\[Transpose], [email protected]@tmp]\[Transpose]です。 AppendPrependと交換します。

次に速いのは、Table[tmp[[n]]~Join~{n}, {n, [email protected]}] - ほぼ2倍の遅さです。

+4

明らかに、あなたはhttp://stackoverflow.com/questions/4270802/inserting-into-a-2d-list/4270825#4270825で答えを見逃しました。 'ArrayFlatten'を使う方が速いようです。 –

関連する問題