我使用数组,但我不需要在任何时候改变长度,但同时我在编写代码时不知道它们的长度.只有当我需要创建它们时才知道它的长度.
特别是我正在使用StaticArrays,我想定义一个类型的函数f(v::MVector{N,Float64}),它将接受MVector任何长度的输入.我该如何输入?
对于一个运行的例子,假设我们有一个mv固定长度的向量,但我们只知道它在运行时的长度.它可以这样定义:
julia> using StaticArrays
julia> mv = @MVector rand(4)
4-element MVector{4,Float64}:
0.978253
0.691035
0.988942
0.770601
Run Code Online (Sandbox Code Playgroud)
要定义一个对这个向量进行操作的函数,我们可以写:
julia> mysum(v::MVector{N,Float64}) where {N} = sum(v)
Run Code Online (Sandbox Code Playgroud)
请注意where {N}使其符合所有固定大小的符号.
但这是不必要的.写作:
julia> mysum2(v) = sum(v)
Run Code Online (Sandbox Code Playgroud)
因为为每种类型的参数编译了新版本的函数,所以即使在运行时也可以优化特定长度.这是因为Julia根据参数类型专门设计了一个函数.MVectors包括其类型的长度,因此在运行时生成并使用该长度的专用函数.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |