我是朱莉娅的新人。我一直在查看一些文档,例如[1],[2],[3]。一般来说,我发现它很有用,但我发现其中缺乏组织。他们都采用“通过实例学习”的方法,但他们中的任何一种都有一种结构化的方式来接近语言的显着特征。
好吧,我的问题是我正在尝试用一些变量构建一个定义的类型。其中,至少一个变量是n维数组,其中维度是定义类型内的变量。首先,我甚至无法在“struct”中定义一个固定的维度张量。
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
中定义一个“指针”,然后重新整形指针,如:
Type Geometry
dimension::UInt
coordinates::Float64
end
mesh=Geometry(10,0)
reshape(mesh.coordinates,(10,3))
说你不能reshape
标量。
所以,我的两个问题是:
有没有办法在julia中构建这个动态维度定义类型?
更重要的是:你对朱莉娅有任何推荐的,有组织的和有条理的参考书目,就像我们Metcalf. Fortran 95/2003 explained为fortran一样吗?
谢谢大家。
答案 0 :(得分:4)
您正在查看Julia的旧版本文档。 Here is the documentation目前的稳定版本(现在为0.6)。
表达式Array{Float64}(10,2)
构造一个10x2数组(一个值)。您可以使用类型而不是值来定义字段。对于两个维度,相应的类型为Array{Float64, 2}
- 2。元素的确切数量不会被编码到数组类型中;这是价值的一部分。所以你想要:
type Geometry
coordinates::Array{Float64, 2}
end
当然,这意味着每个Geometry
对象必须只包含一个二维数组。你可以做到这一点"动态"通过简单地省略数组类型中维度数量的参数(但权衡的是,这也不会表现出来):
type Geometry
coordinates::Array{Float64}
end
现在,您可以使用任何维度的坐标数组构造Geometry
个对象。更高级的是使用parametric type,但我建议首先获得该语言的基础知识。
最后,请注意reshape
不是就地操作。返回的数组共享数据,但第一个数组保留其原始形状。