好吧,想象一下我有这个矩阵:{{1,2},{2,3}},我宁愿有{{4,1,2},{5,2,3}}。也就是说,我在矩阵中添加了一列。有没有简单的方法来做到这一点?如何在矩阵上添加一列?
我最好的建议是这样的:
PrependColumn[vector_List, matrix_List] :=
Outer[Prepend[#1, #2] &, matrix, vector, 1]
但它混淆了代码和不断需要装载更多的代码。这不是以某种方式建立的吗?
好吧,想象一下我有这个矩阵:{{1,2},{2,3}},我宁愿有{{4,1,2},{5,2,3}}。也就是说,我在矩阵中添加了一列。有没有简单的方法来做到这一点?如何在矩阵上添加一列?
我最好的建议是这样的:
PrependColumn[vector_List, matrix_List] :=
Outer[Prepend[#1, #2] &, matrix, vector, 1]
但它混淆了代码和不断需要装载更多的代码。这不是以某种方式建立的吗?
由于ArrayFlatten
在数学6引入了至少混淆的解决方案必须是
matrix = {{1, 2}, {2, 3}}
vector = {{4}, {5}}
[email protected]{{vector, matrix}}
一个好的技巧是用0
替换任何矩阵块给你一个正确大小的零块。
我认为至少是晦涩这样做的以下方式:
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]]
THE ... ABSOLUTELY .. BY FAR ...最快的方法来追加或预先列从我的各种方法的测试列RandomReal[100,{10^8,5}]
(孩子们,不要在家里尝试...如果您的机器isn不是为速度和内存而设计的,在这个尺寸的阵列上的操作可以保证你的电脑挂起) ...是这样的:Append[tmp\[Transpose], [email protected]@tmp]\[Transpose]
。 随意替换Append
与Prepend
。
下一个最快的是这个:Table[tmp[[n]]~Join~{n}, {n, [email protected]}]
- 几乎是两倍慢。
显然你错过了http://stackoverflow.com/questions/4270802/inserting-into-a-2d-list/4270825#4270825中的答案。使用'ArrayFlatten'似乎更快。 – 2011-09-25 18:39:47