好吧,想象一下我有這個矩陣:{{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