我想要一个 Julia 结构,其中包含数据和参数,以便与各种函数一起使用。例如,我从数字数据框开始,但许多函数将其用作矩阵,并且还需要知道其维度。在 python 中我会使用类似的东西:
class my_class(object):
def __init__(self, df):
X = df.to_numpy()
self.n, self.m = X.shape
row_names = df.index.tolist()
col_names = df.columns.tolist()
Foo = my_class(df)
难点在于
.to_numpy()
、.shape
等操作是否可以在Julia结构中执行或者是否可以预先执行。或者这可能需要使用可变结构?
以我目前的知识水平,我会做这样的事情:
struct MyClass
df::DataFrame
X::Matrix{Float64}
n::Int64
m::Int64
row_names::Vector{String}
col_names::Vector{String}
end
X = Matrix{Float64}(df[:,begin+1:end])
n, m = size(X)
row_names = df[:,begin]
col_names = names(SAT[:,begin+1:end])
Foo = MyClass(df, X, n, m, row_names, col_names)
备注:想想看,我可能可以将上面的代码包装在一个函数中,该函数返回初始化的结构体 Foo。但这似乎是一种复杂的做法。
在 Julia 网站上提出这个问题并浏览了 Julia constructors 上的建议阅读内容后,我认为答案应该如下:
struct MyClass
df::DataFrame
X::Matrix{Float64}
n::Int64
m::Int64
row_names::Vector{String}
col_names::Vector{String}
function MyClass(df::DataFrame)
X = Matrix{Float64}(df[:,begin+1:end])
n, m = size(X)
row_names = df[:,begin]
col_names = names(SAT[:,begin+1:end])
new(df, X, n, m, row_names, col_names)
end
end
Foo = MyClass(df)