该问题已被要求使用其他语言。我想问一下朱莉娅。
在多个结构数组之间进行选择的一般准则是什么
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}
是否有性能方面的考虑?还是仅仅是样式/可读性问题。
答案 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本身中定义的,就像您在此处所做的一样。
因此,简短的总结是:两种方法都是高效的,因此在您的应用程序上下文中使用更有意义的方法。