2009-08-07 106 views
11

好吧,想象一下我有這個矩陣:{{1,2},{2,3}},我寧願有{{4,1,2},{5,2,3}}。也就是說,我在矩陣中添加了一列。有沒有簡單的方法來做到這一點?如何在矩陣上添加一列?

我最好的建議是這樣的:

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

但它混淆了代碼和不斷需要裝載更多的代碼。這不是以某種方式建立的嗎?

回答

11

由於ArrayFlatten在數學6引入了至少混淆的解決方案必須是

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

[email protected]{{vector, matrix}} 

一個好的技巧是用0替換任何矩陣塊給你一個正確大小的零塊。

7

我認爲至少是晦澀這樣做的以下方式:

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

一般來說,MapThread是你最經常使用的任務,像這樣的功能(我用它所有的在將這些標籤添加到數組之前,將它們很好地與Grid合併在一起),它可以使事情更清晰,更簡潔,使用Prepend而不是等效的Prepend[#1, #2]&

7

我相信最常見的方式是轉置,前置,並再次轉:

PrependColumn[vector_List, matrix_List] := 
    Transpose[Prepend[Transpose[matrix], vector]] 
0

THE ... ABSOLUTELY .. BY FAR ...最快的方法來追加或預先列從我的各種方法的測試列RandomReal[100,{10^8,5}](孩子們,不要在家裏嘗試...如果您的機器isn不是爲速度和內存而設計的,在這個尺寸的陣列上的操作可以保證你的電腦掛起) ...是這樣的:Append[tmp\[Transpose], [email protected]@tmp]\[Transpose]。 隨意替換AppendPrepend

下一個最快的是這個:Table[tmp[[n]]~Join~{n}, {n, [email protected]}] - 幾乎是兩倍慢。

+4

顯然你錯過了http://stackoverflow.com/questions/4270802/inserting-into-a-2d-list/4270825#4270825中的答案。使用'ArrayFlatten'似乎更快。 – 2011-09-25 18:39:47