11

好的,假设我有这个矩阵:{{1,2},{2,3}},我宁愿有 {{4,1,2},{5,2,3}}。也就是说,我在矩阵中添加了一列。有没有简单的方法来做到这一点?

我最好的建议是这样的:

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

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

4

4 回答 4

11

由于ArrayFlatten在 Mathematica 6 中引入了最少混淆的解决方案,因此必须是

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

ArrayFlatten@{{vector, matrix}}

一个不错的技巧是用任何矩阵块替换0为您提供大小合适的零块。

于 2010-02-16T16:59:52.180 回答
7

我认为最不模糊的是以下方法:

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

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

于 2009-08-07T13:58:46.650 回答
7

我相信最常见的方法是转置、前置和再次转置:

PrependColumn[vector_List, matrix_List] := 
  Transpose[Prepend[Transpose[matrix], vector]]
于 2009-08-08T03:00:05.723 回答
0

......绝对......到目前为止......从我对数组的各种方法的测试中附加或预先添加一列的最快方法RandomReal[100,{10^8,5}](孩子们,不要在家里尝试这个......如果你的机器不是为了速度而建造的和内存,对这个大小的数组的操作保证会挂起你的计算机)......这是:Append[tmp\[Transpose], Range@Length@tmp]\[Transpose]. 随意更换AppendPrepend

下一个最快的事情是:Table[tmp[[n]]~Join~{n}, {n, Length@tmp}]- 几乎慢了两倍。

于 2011-09-25T18:20:23.543 回答