How to prepend a column to a matrix?

前端 未结 4 1178
情深已故
情深已故 2020-12-09 12:16

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

相关标签:
4条回答
  • 2020-12-09 12:29

    Since ArrayFlatten was introduced in Mathematica 6 the least obfuscated solution must be

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

    A nice trick is that replacing any matrix block with 0 gives you a zero block of the right size.

    0 讨论(0)
  • 2020-12-09 12:31

    I think the least obscure is the following way of doing this is:

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

    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 with Grid), and it can make things a lot clearer and more concise to use Prepend instead of the equivalent Prepend[#1, #2]&.

    0 讨论(0)
  • 2020-12-09 12:32

    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]. Replace Append with Prepend at will.

    The next fastest thing is this: Table[tmp[[n]]~Join~{n}, {n, Length@tmp}] - almost twice as slow.

    0 讨论(0)
  • 2020-12-09 12:48

    I believe the most common way is to transpose, prepend, and transpose again:

    PrependColumn[vector_List, matrix_List] := 
      Transpose[Prepend[Transpose[matrix], vector]]
    
    0 讨论(0)
提交回复
热议问题