Numpy 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

我在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,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的
子类
功能,那就太好了。“重新定义一切”并不能很好地扩展。关于如何使其更好,还有一些悬而未决的问题,例如,它所链接的内容@昆汀·艾斯曼,没有你的干预是不可能做到的,因为它的意思模棱两可。我刚才链接的建议是,将“委托”给内部向量,这是一个用最少的努力解决歧义的好方法。我完全同意,重新定义所有已经使用向量的方法是乏味的。