如何将列添加到矩阵?

时间:2009-08-07 13:46:29

标签: matrix wolfram-mathematica

好的,想象一下我有这个矩阵:{{1,2},{2,3}},我宁愿拥有{{4,1,2},{5,2,3}}。也就是说,我在列中添加了一列。有没有简单的方法呢?

我最好的建议是:

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

但它混淆了代码并且不断需要加载越来越多的代码。这不是以某种方式构建的吗?

4 个答案:

答案 0 :(得分:11)

自Mathematica 6中引入ArrayFlatten以来,最不混淆的解决方案必须

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

ArrayFlatten@{{vector, matrix}}

一个很好的技巧是用0替换任何矩阵块会给你一个正确大小的零块。

答案 1 :(得分:7)

我认为最不起眼的是以下方式:

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

一般来说,MapThread是您最常用于此类任务的函数(我在向数组添加标签之前一直使用它,然后使用Grid很好地形成它们),并且它可以使事情变得更清晰,更简洁,使用Prepend而不是等效的Prepend[#1, #2]&

答案 2 :(得分:7)

我认为最常见的方法是再次进行转置,前置和转置:

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

答案 3 :(得分:0)

THE ...绝对......通过FAR ...最快的方法来添加或预先添加我在阵列RandomReal[100,{10^8,5}]上的各种方法的测试中的列(孩子们,不要在家里试试......如果你的机器不是为速度和内存而构建的,这个大小的阵列上的操作可以保证你的计算机挂起) ......这是:Append[tmp\[Transpose], Range@Length@tmp]\[Transpose]。 随意将Append替换为Prepend

下一个最快的事情是:Table[tmp[[n]]~Join~{n}, {n, Length@tmp}] - 差不多两倍。