Julia

时间:2017-07-13 01:16:50

标签: multidimensional-array dynamic julia

我是朱莉娅的新人。我一直在查看一些文档,例如[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一样吗?

谢谢大家。

1 个答案:

答案 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不是就地操作。返回的数组共享数据,但第一个数组保留其原始形状。

相关问题