gpt4 book ai didi

static - 以 NTuple 作为参数但施加(静态)大小约束的函数,如何定义它们?

转载 作者:行者123 更新时间:2023-12-02 11:37:17 24 4
gpt4 key购买 nike

我想定义以 NTuples 作为参数但有大小限制的函数。

这个想法是声明类似的内容:

foo(x::NTuple{K-1,Int},y::NTuple{K,Int}) where {K} = "ok"

但这不是正确的 Julia 代码。

我的问题是:如何在 Julia 中定义此类函数?


(仅用于说明目的):对于C++程序员来说,我的问题相当于“如何翻译这种C++代码

template <size_t N>
foo(const std::array<int, N-1>& x, const std::array<int, N>& y)
{ ... }

转换为格式良好的 Julia 代码。”

最佳答案

在这种特定情况下,您可以执行以下操作:

foo(x::NTuple{M,Int},y::Tuple{Int, Vararg{Int,M}}) where {M} = "ok"

因为尺寸差异是固定的。

在更一般的情况下,我所知道的唯一一件事就是在函数内添加一个条件:

foo(x::NTuple{M,Int},y::NTuple{K,Int}) where {M,K} = 
M + 1 == K ? "ok" : throw(ArgumentError("dimension mismatch"))

并且条件检查应该由编译器优化(至少在这种情况下,它似乎在 Julia 1.0.3 下进行了优化)。

关于static - 以 NTuple 作为参数但施加(静态)大小约束的函数,如何定义它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54217348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com