multidimensional-array - Julia 中具有未指定维度数组的定义类型

标签 multidimensional-array dynamic julia

我是 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/

相关文章:

arrays - Julia - 随机数组

csv - 如何减少在 Julia 中打开大型 csv 文件所需的时间(使用 CSV 和 DataFrames)?

Javascript 生成 2 个大小的多维数组

Python numpy loadtxt : reading an empty file into an array with a particular number of columns

javascript - 无法动态生成文本字段Javascript onChange

c++ - 如何从使用::dlopen 打开的库中获取 linux 中动态加载的库的名称?

loops - 对于高维数组,Julia 中的数组访问循环很慢

java - 二维数组中的搜索功能崩溃 (Java)

php - 多维关联数组 (PHP)

java - JDK7的invokedynamic如何实现多态