好的,想象一下我有这个矩阵:{{1,2},{2,3}},我宁愿拥有{{4,1,2},{5,2,3}}。也就是说,我在列中添加了一列。有没有简单的方法呢?
我最好的建议是:
PrependColumn[vector_List, matrix_List] :=
Outer[Prepend[#1, #2] &, matrix, vector, 1]
但它混淆了代码并且不断需要加载越来越多的代码。这不是以某种方式构建的吗?
答案 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}]
- 差不多两倍。