Ok, imagine I have this Matrix: {{1,2},{2,3}}, and I'd rather have {{4,1,2},{5,2,3}}. That is, I prepended a column to the matrix. Is there an easy way to do it?
My best proposal is this:
PrependColumn[vector_List, matrix_List] :=
Outer[Prepend[#1, #2] &, matrix, vector, 1]
But it obfuscates the code and constantly requires loading more and more code. Isn't this built in somehow?
Since
ArrayFlatten
was introduced in Mathematica 6 the least obfuscated solution must beA nice trick is that replacing any matrix block with
0
gives you a zero block of the right size.THE... ABSOLUTELY.. BY FAR... FASTEST method to append or prepend a column from my tests of various methods on array
RandomReal[100,{10^8,5}]
(kids, don't try this at home... if your machine isn't built for speed and memory, operations on an array this size are guaranteed to hang your computer) ...is this:Append[tmp\[Transpose], Range@Length@tmp]\[Transpose]
. ReplaceAppend
withPrepend
at will.The next fastest thing is this:
Table[tmp[[n]]~Join~{n}, {n, Length@tmp}]
- almost twice as slow.I believe the most common way is to transpose, prepend, and transpose again:
I think the least obscure is the following way of doing this is:
In general,
MapThread
is the function that you'll use most often for tasks like this one (I use it all the time when adding labels to arrays before formating them nicely withGrid
), and it can make things a lot clearer and more concise to usePrepend
instead of the equivalentPrepend[#1, #2]&
.