わかりました、このマトリックスがあると想像してください: {{1,2},{2,3}}。つまり、行列の先頭に列を追加しました。それを行う簡単な方法はありますか?
私の最高の提案はこれです:
PrependColumn[vector_List, matrix_List] :=
Outer[Prepend[#1, #2] &, matrix, vector, 1]
しかし、それはコードを難読化し、常により多くのコードをロードする必要があります。これは何とか組み込まれていませんか?
わかりました、このマトリックスがあると想像してください: {{1,2},{2,3}}。つまり、行列の先頭に列を追加しました。それを行う簡単な方法はありますか?
私の最高の提案はこれです:
PrependColumn[vector_List, matrix_List] :=
Outer[Prepend[#1, #2] &, matrix, vector, 1]
しかし、それはコードを難読化し、常により多くのコードをロードする必要があります。これは何とか組み込まれていませんか?
Mathematica 6で導入されて以来ArrayFlatten
、最も難読化されていないソリューションは
matrix = {{1, 2}, {2, 3}}
vector = {{4}, {5}}
ArrayFlatten@{{vector, matrix}}
良いトリックは、任意のマトリックスブロックをで置き換える0
と、適切なサイズのゼロブロックが得られることです。
これを行う次の方法は、最もあいまいではないと思います。
PrependColumn[vector_List, matrix_List] := MapThread[Prepend, {matrix, vector}];
一般に、MapThread
は、このようなタスクで最も頻繁に使用する関数です (配列にラベルを追加してから、 で適切にフォーマットするときに常に使用しますGrid
)。これを使用すると、物事がより明確かつ簡潔になりますPrepend
同等の代わりにPrepend[#1, #2]&
。
最も一般的な方法は、転置し、先頭に追加して、再度転置することだと思います。
PrependColumn[vector_List, matrix_List] :=
Transpose[Prepend[Transpose[matrix], vector]]
THE ...絶対に..はるかに...配列のさまざまな方法の私のテストから列を追加または前に追加する最速の方法RandomReal[100,{10^8,5}]
(子供、自宅でこれを試さないでください...マシンが速度のために構築されていない場合とメモリ、このサイズの配列に対する操作は、コンピューターをハングアップさせることが保証されています) ...これは: Append[tmp\[Transpose], Range@Length@tmp]\[Transpose]
. Append
勝手に交換Prepend
。
次に速いのはこれです: Table[tmp[[n]]~Join~{n}, {n, Length@tmp}]
- ほぼ 2 倍遅いです。