Matrix 如何将列前置到矩阵?
好,假设我有这个矩阵:{{1,2},{2,3},我宁愿有{4,1,2},{5,2,3}。也就是说,我在矩阵前面加了一列。有没有简单的方法 我最好的建议是: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
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
似乎更快。