Numpy Julia中具有属性的数组
我在julia中迈出了第一步,我想重现我通过Numpy Julia中具有属性的数组,numpy,julia,Numpy,Julia,我在julia中迈出了第一步,我想重现我通过numpy所取得的成就 我想编写一个新的类似数组的类型,它本质上是任意类型元素的向量,为了保持示例的简单性,还需要一个标量属性,例如采样频率fs 我是从这样的事情开始的 type TimeSeries{T} <: DenseVector{T,} data::Vector{T} fs::Float64 end 2) 索引TimeSeries总是返回TimeSeries: ts[1:3] ts * 2 ts + [1,2,3,1
numpy
所取得的成就
我想编写一个新的类似数组的类型,它本质上是任意类型元素的向量,为了保持示例的简单性,还需要一个标量属性,例如采样频率fs
我是从这样的事情开始的
type TimeSeries{T} <: DenseVector{T,}
data::Vector{T}
fs::Float64
end
2) 索引TimeSeries
总是返回TimeSeries
:
ts[1:3]
ts * 2
ts + [1,2,3,1,543,1,24,5]
3) 返回向量
以返回时间序列
的内置函数:
ts[1:3]
ts * 2
ts + [1,2,3,1,543,1,24,5]
我已经开始实现size
,getindex
等等,但是我确实不知道如何匹配第2点和第3点
numpy
有一个非常全面的方法来实现这一点:R
似乎也允许链接属性attr()也许我不明白,为什么对于第3点来说这还不够呢
(*)(ts::TimeSeries, n) = TimeSeries(ts.data*n, ts.fs)
(+)(ts::TimeSeries, n) = TimeSeries(ts.data+n, ts.fs)
至于第2点
Base.getindex(ts::TimeSeries, r::Range) = TimeSeries(ts.data[r], ts.fs)
或者你是在寻求一种更简单的方法,将所有这些操作委托给内部向量?你可以做一些聪明的事情,比如
for op in (:(+), :(*))
@eval $(op)(ts::TimeSeries, x) = TimeSeries($(op)(ts.data,x), ts.fs)
end
非常感谢,您能想出任何方法自动为向量上可能使用的所有函数执行此操作(例如,如果T
是Float
,则可以应用sin(TimeSeries)
,并保证使用新的TimeSeries
)?如果Julia有一些类似Python的子类
功能,那就太好了。“重新定义一切”并不能很好地扩展。关于如何使其更好,还有一些悬而未决的问题,例如,它所链接的内容@昆汀·艾斯曼,没有你的干预是不可能做到的,因为它的意思模棱两可。我刚才链接的建议是,将“委托”给内部向量,这是一个用最少的努力解决歧义的好方法。我完全同意,重新定义所有已经使用向量的方法是乏味的。