昨天我的课程中出现了以下问题:
假设我有一个矩阵M = rand(3, 10)
来自计算,例如ODE求解器。
在Python中,你可以做到
x, y, z = M
将M
行提取到三个变量中,例如:用matplotlib
绘图。
在朱莉娅,我们可以做到
M = M' # transpose
x = M[:, 1]
y = M[:, 2]
z = M[:, 3]
有没有更好的方法来进行这种提取? 能够写至少(接近Python)
会很高兴x, y, z = columns(M)
或
x, y, z = rows(M)
一种方法是
columns(M) = [ M[:,i] for i in 1:size(M, 2) ]
但这将是所有数据的昂贵副本。
为了避免这种情况,我们需要一个返回切片的新迭代器类型ColumnIterator
?除了使用这个漂亮的语法之外,这会有用吗?
答案 0 :(得分:1)
columns(M) = [ slice(M,:,i) for i in 1:size(M, 2) ]
和
columns(M) = [ sub(M,:,i) for i in 1:size(M, 2) ]
它们都返回一个视图,但切片会删除索引的所有维度 标量。
答案 1 :(得分:1)
如果M
是Vector
Vector
的{{1}}(而不是矩阵),我刚刚找到的一个不错的选择是使用zip
:
julia> M = Vector{Int}[[1,2,3],[4,5,6]]
2-element Array{Array{Int64,1},1}:
[1,2,3]
[4,5,6]
julia> a, b, c = zip(M...)
Base.Zip2{Array{Int64,1},Array{Int64,1}}([1,2,3],[4,5,6])
julia> a, b, c
((1,4),(2,5),(3,6))