昨天我的课程中出现了以下问题:
假设我有一个M = rand(3, 10)来自计算的矩阵,例如ODE求解器.
在Python中,你可以做到
x, y, z = M
将行提取M到三个变量中,例如用于绘制matplotlib.
在Julia,我们可以做到
M = M' # transpose
x = M[:, 1]
y = M[:, 2]
z = M[:, 3]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来进行这种提取?能够写至少(接近Python)会很高兴
x, y, z = columns(M)
Run Code Online (Sandbox Code Playgroud)
要么
x, y, z = rows(M)
Run Code Online (Sandbox Code Playgroud)
一种方法是
columns(M) = [ M[:,i] for i in 1:size(M, 2) ]
Run Code Online (Sandbox Code Playgroud)
但这将成为所有数据的昂贵副本.
为了避免这种情况,我们需要一个新的迭代器类型ColumnIterator,它返回切片?除了使用这个漂亮的语法之外,这会有用吗?
columns(M) = [ slice(M,:,i) for i in 1:size(M, 2) ]
和
columns(M) = [ sub(M,:,i) for i in 1:size(M, 2) ]
它们都返回一个视图,但切片会删除所有用标量索引的维度。
| 归档时间: |
|
| 查看次数: |
1912 次 |
| 最近记录: |