首页 > 解决方案 > 如何在 Julia 中定义一个 Fortran 类型的等效对象

问题描述

我有一个定义为 mean_covar 的 Fortran 类型,如下所示,

type :: mean_covar
    real(kind=r8), allocatable :: mu(:,:)
    real(kind=r8), allocatable :: sigma(:,:)
    real(kind=r8) :: w
end type

这样我就可以将一些变量设置为 Mean_covar 类型。

我想在 Julia 中定义相同的东西,我知道 Julia 有一个叫做 struct 的东西,具有可变属性,它的字段可以更改。所以我做了一个非常简单的事情,比如,

mutable struct Mean_covar
    mu::Array{Float64,2}
end

然后我定义,

musigma = Mean_covar(Array{Float64,2}(undef,2,2))

所以我可以将 musigma.mu 设置为我想要的任何二维数组。

但是我只是想知道,定义musigma的时候一定要这么麻烦吗(需要设置每个字段的值)?我可以简单地做

musigma::Mean_covar

但这给了我一个错误,

UndefVarError: musigma not defined

标签: julia

解决方案


我不确定你想如何构建你的数据,但你可以这样做:

struct MeanCovar
    mu::Matrix{Float64}
    MeanCovar(n) = new(zeros(n,n))
end

这可以简单地使用:

julia> m = MeanCovar(2)
MeanCovar([0.0 0.0; 0.0 0.0])

请注意,当您知道 MeanCovar 的大小时,它不能是可变的,因为您仍然可以改变 中的值mu,因为mu只保留对数组的引用。

julia> m.mu[1,1] = 66
66

julia> m.mu
2×2 Matrix{Float64}:
 66.0  0.0
  0.0  0.0

推荐阅读