在Python中,我可以这样做:
a = array([[1,2],[3,4]])
row1, row2 = a
朱莉娅是否有相同的单线?这似乎不起作用:
a = [[1 2]; [3 4]]
row1, row2 = a
相反,它设置row1 = 1和row2 = 3。谢谢!
答案 0 :(得分: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是副本则不会。副本的缺点是它们会占用更多内存。
答案 1 :(得分:3)
根据您的操作,您可以使用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])
中,您需要将数组类型化为数组数组,如下所示:
[x if a else b for x in lst]
答案 2 :(得分:2)
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这样的通用语言都是图灵完备的,所以一切都可以完成,但是没有必要期望代码太相似了。朱莉娅的方式有望成为更好的方式。