[英]How to unpack multdimensional array into variables in Julia
在Python中我可以做到:
a = array([[1,2],[3,4]])
row1, row2 = a
朱莉婭有一個等效的單線程嗎? 這似乎不起作用:
a = [[1 2]; [3 4]]
row1, row2 = a
相反,它設置row1 = 1和row2 = 3。 謝謝!
我能想到的最短的單線是朱莉婭
r1, r2 = [sub(a, i, :) for i=1:2]
它沒有寫出來那么高效
r1 = sub(a, 1, :)
r2 = sub(a, 2, :)
因為第一個版本創建了一個臨時數組,然后將其解壓縮到左側的元組中。
新版本的NumPy(1.10左右)現在返回數組的視圖,而不是副本。 在Julia 0.4中,視圖由sub創建,副本通過切片創建。 所以朱莉婭
r1 = a[1,:]
不等同於類似的NumPy / Python語句
r1 = a[0,:]
視圖和副本之間的主要區別在於,如果r1是視圖,則更改a的條目將更改r1的條目,但如果r1是副本則不會。 副本的缺點是它們占用更多內存。
根據你正在做的事情你可以使用Vector{Vector{T}}
,就像python列表列表而不是Matrix
( Array{T,2}
)。
在v0.5+
它只是工作, [ , ]
:
julia> VERSION
v"0.5.0-dev+4440"
julia> a = [[1, 2], [3, 4]]
2-element Array{Array{Int64,1},1}:
[1, 2]
[3, 4]
julia> a = [[1, 2]; [3, 4]]
4-element Array{Int64,1}:
1
2
3
4
julia> row1, row2 = a;
julia> (row1, row2)
(2-element Array{Int64,1}:
1
2,2-element Array{Int64,1}:
3
4)
在v0.4+
您需要將數組類型化為數組數組,如下所示:
julia> VERSION
v"0.4.5"
julia> a = Vector[[1, 2], [3, 4]]
2-element Array{Array{T,1},1}:
[1,2]
[3,4]
julia> b = [[1, 2]; [3, 4]]
4-element Array{Int64,1}:
1
2
3
4
julia> c = [[1, 2], [3, 4]]
WARNING: [a,b] concatenation is deprecated; use [a;b] instead
in depwarn at deprecated.jl:73
in oldstyle_vcat_warning at abstractarray.jl:29
in vect at abstractarray.jl:32
while loading no file, in expression starting on line 0
4-element Array{Int64,1}:
1
2
3
4
julia> row1, row2 = a;
julia> row1, row2
([1,2],[3,4])
Julia中的數組更通用(它們可以超過2-d矩陣)。 因此,“行”的含義不太清楚,可能有更多選項來切割程序員打算使用的數組。 因此,需要在表達式中添加更多信息。
我想出的版本是:
row1, row2 = ([vec(a[i,:]) for i in 1:size(a,1)]...)
說明:
([ ]...)
從向量中創建一個元組 size(a,2)
返回行數 vec( )
將數組轉換為向量,因為索引矩陣是一個矩陣。 [ <...> for i in <...>]
是一個數組理解(Python也有它們) row1, row2 = <...tuple...>
解包一個元組並將值賦給變量。 像Julia和Python這樣的通用語言都是圖靈完備的,所以一切都可以完成,但是沒有必要期望代碼太相似了。 朱莉婭的方式有望成為更好的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.