Matrix 如何将列前置到矩阵?

Matrix 如何将列前置到矩阵?,matrix,wolfram-mathematica,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] 但它混淆了代码,并且不断地需要加载越来越多的代码。这不是某种内置的吗?我认为最简单的方法是: PrependColumn[vector_List, matr

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

我最好的建议是:

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

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

我认为最简单的方法是:

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]]

由于Mathematica 6中引入了
ArrayFlatten
,因此模糊程度最低的解决方案必须是

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

ArrayFlatten@{{vector, matrix}}

一个很好的技巧是,用
0
替换任何矩阵块都会得到一个大小合适的零块。

。。。绝对地到目前为止。。。从我对数组的各种方法的测试中附加或预加一列的最快方法
RandomReal[100,{10^8,5}]
(孩子们,不要在家里尝试这个方法……如果你的机器不是为速度和内存而设计的,那么在这种大小的数组上操作肯定会挂起你的计算机) …这是:
Append[tmp\[Transpose],Range@Length@tmp]\[转置]
。 随意将
Append
替换为
Prepend


其次是:
Table[tmp[[n]]~Join{n},{n,Length@tmp}]
-速度几乎是原来的两倍。

很明显,你没有找到答案。使用
ArrayFlatten
似乎更快。