2015-04-27 54 views
2

給出一個產生單個列的函數/表達式,如何在Julia的這些列中構建一個矩陣?我嘗試以下(簡化的例子):如何從Julia中的行/列向量構造矩陣

column(j) = [j, j, j]  # for example 
my_matrix = Float64[column(j)[i] for i in 1:3, j in 1:4] 

==> 3x4 Array{Float64,2}: 
1.0 2.0 3.0 4.0 
1.0 2.0 3.0 4.0 
1.0 2.0 3.0 4.0 

的結果是正確的,但是這不是我想要的,因爲列矢量表達式(每一行一次)不必要的評估。

我也嘗試這種替代方法:

[column(j) for j in 1:4] 

==> 4-element Array{Array{Float64,1},1}: 
[1.0,1.0,1.0] 
[2.0,2.0,2.0] 
[3.0,3.0,3.0] 
[4.0,4.0,4.0] 

但我發現沒有辦法轉換重塑到這一點我想要的形式(矩陣兩個維度,而不是陣列中的陣列)。

如何在朱莉婭做到這一點?

回答

6

你試過hcat

julia> column(j) = [j, j ,j] 
column (generic function with 1 method) 

julia> my_matrix = hcat([column(j) for j=1:4]...) 
3x4 Array{Int64,2}: 
1 2 3 4 
1 2 3 4 
1 2 3 4 
+0

這是完美的,謝謝!我知道* cat函數,但我不知道數組=>通過省略號解包元組轉換。對其他朱莉婭新手的建議:至少考慮查看最新版本的文檔(即使使用舊版本的朱莉婭),也有一些急劇的總體改進(例如THIS)。 – radioflash

+0

太棒了,很高興它適合你。是的,手冊變化很快,所以看最新版本通常是一個好主意。 – spencerlyon2

+0

如果第二維度很大,該怎麼辦?當'j'運行到大於2百萬的值時,我會得到段錯誤或堆棧溢出。 – Alex