簡體   English   中英

如何在Julia中將多維數組解壓縮為變量

[英]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列表列表而不是MatrixArray{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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM