选择结构数组或多个数组的准则

时间:2019-01-24 02:02:43

标签: julia

该问题已被要求使用其他语言。我想问一下朱莉娅。

在多个结构数组之间进行选择的一般准则是什么

struct vertex
    x::Real
    y::Real
    gradient_x::Real
    gradient_y::Real
end

myarray::Array{Vertex}

和多个数组。

xpositions::Array{<:Real}
ypositions::Array{<:Real}
gradient_x::Array{<:Real}
gradient_y::Array{<:Real}

是否有性能方面的考虑?还是仅仅是样式/可读性问题。

1 个答案:

答案 0 :(得分:3)

您当前的FOR res IN FULLTEXT(v_test, "description", @searchInputValue) RETURN res 的效果会很差。在Performance Tips中,您应该始终:

  

避免使用抽象类型的字段

类似地,您应该始终偏爱struct而不是Vector{<:Real}

儒略式的实现方法是如下设置Vector{Real}的参数:

struct

鉴于以上所述,问题中讨论的两种方法现在将具有大致相似的性能。实际上,这实际上取决于您要执行哪种操作。例如,如果您经常只需要一个struct Vertex{T<:Real} x::T y::T gradient_x::T gradient_y::T end 字段的向量,那么拥有多个数组可能是一个更好的方法,因为任何时候您都需要一个{{1} },您将需要遍历这些结构来分配它:

x

另一方面,如果您的应用程序适合于在结构的所有四个字段上调用的函数,那么如果您使用x,则代码将变得更加清晰,并且性能与循环遍历4个代码一样数组。特别是广播将在此处提供清晰的代码。例如,如果您有一些功能:

Vector{Vertex}

然后只需添加方法:

xvec = [ v.x for v in vertexvec ]

现在,如果要将其应用于Vector{Vertex},则可以使用:

f(x, y, gradient_x, gradient_y)

请记住,Julia中用户定义的类型与“内置”类型的性能一样。实际上,您可能会认为许多内置类型只是在Julia本身中定义的,就像您在此处所做的一样。

因此,简短的总结是:两种方法都是高效的,因此在您的应用程序上下文中使用更有意义的方法。