我是 Julia 的新人。我一直在查看一些文档,例如 [1] , [2] , [3] 。一般来说,我发现它很有用,但我发现它们缺乏组织性。它们都采用“通过示例学习”的方法,但它们中的任何一个都具有结构化的方法来接近该语言的显着特征。
嗯,我的问题是我试图用一些变量构建一个定义的类型。其中,至少一个变量是一个 n 维数组,其中维度是该定义类型内的变量。首先,我什至无法在“结构”中定义固定维度张量。
Type Geometry
dimension::UInt
coordinates::Array{Float64}(10,2)
end
说的是:
expected Type, got Array.
例如:
Type Geometry
dimension::UInt
coordinates=Array{Float64}(10,2)
end
说的是:
"assignation" in Type definition is reserved.
另一种方法是在 Type
中定义一个“指针”,然后 reshape 该指针,如下所示:
Type Geometry
dimension::UInt
coordinates::Float64
end
mesh=Geometry(10,0)
reshape(mesh.coordinates,(10,3))
表示您无法 reshape
标量。
所以,我的两个问题是:
有什么方法可以在 julia 中构建这个动态维度定义类型吗?
更重要的是:您是否有像我们一样推荐的、有组织的、结构化的 Julia 引用书目 Metcalf. Fortran 95/2003 explained Fortran 语言?
谢谢大家。
最佳答案
您正在查看 Julia 文档的一个非常旧的版本。 Here is the documentation对于当前的稳定版本(现在是 0.6)。
表达式Array{Float64}(10,2)
构造一个10x2数组(一个值)。您可以使用类型而不是值来定义字段。对应的类型是Array{Float64, 2}
- 2表示二维。元素的确切数量不会编码到数组的类型中;这是值(value)的一部分。所以你想要:
type Geometry
coordinates::Array{Float64, 2}
end
当然,这意味着每个Geometry
对象必须只包含一个二维数组。您可以通过简单地省略数组类型中的维数参数来使其“动态”(但代价是这不会执行得很好):
type Geometry
coordinates::Array{Float64}
end
现在您可以使用任意维度的坐标数组构造 Geometry
对象。更高级的是使用 parametric type ,但我建议首先了解该语言的基础知识。
最后,请注意reshape
不是就地操作。返回的数组共享数据,但第一个数组保留其原始形状。
关于multidimensional-array - Julia 中具有未指定维度数组的定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45069914/