2016-08-08 220 views
3

我有以下的矩陣A = [1.00 2.00; 3.00 4.00],我需要它,如下所示轉換成向量的向量:如何將矩陣轉換爲矢量矢量?

A1 = [1.00; 3.00] A2 = [2.00; 4.00]

任何想法?

+3

你想爲每個向量的向量或單獨的對象的向量?您的文字指示符是前者,您的代碼插圖指示後者。 –

+1

另外,你可以給你爲什麼需要這個背景嗎?在幾乎所有我能想到的情況下,最好只是在它們仍在矩陣中或最多時引用列,並用'sub()'創建它們的單獨視圖。 'B = sub(A,1:size(A,2),1)'。 –

回答

6

TL;博士
這可以用列表解析非常優雅創建:

A = [A[:,i] for i in 1:size(A,2)] 


說明:

這實質上是將A轉換成索引爲A[1,2]的東西,並將索引爲A[2][1],這是你問的。

在這裏,我直接指定回A,這在我看來你的想法。但是,只有在代碼無歧義的情況下才能做到這一點! 在代碼的不同位置使用代表不同事物的同名變量通常不是一個好主意。

注意:如果這逆轉行 /在索引列的順序是不是你心目中的順序,而且希望A[1,2]要索引A[1][2],那麼每執行您的列表理解」行「,即

A = [A[i,:] for i in 1:size(A,1)] 
1

這將是更好的只是用你的矩陣切片即代替A1使用 A[:,1] ,而是A2的使用 A[:,2]

如果你真的需要他們「單獨的」反對意見,你可以嘗試創建一個單元陣列,像這樣:

myfirstcell = cell(size(A,2)) for i in 1:size(A,2) myfirstcell[i] = A[:,i] end

參見http://docs.julialang.org/en/release-0.4/stdlib/arrays/#Base.cell

(單元陣列允許多種不同類型的對象的要被存儲在相同陣列中)

+1

您可以顯式地至少有一個數組Array Array,而不需要使用'cell'' A_vec = Array {Array {eltype(A),1},size(A,2)}' –

+0

同意,接受的答案仍然是雖然好多了! –