【问题标题】:Type-stability in Julia's product iteratorJulia 乘积迭代器中的类型稳定性
【发布时间】:2023-02-06 15:34:56
【问题描述】:

我正在尝试使以下代码中的 A 类型稳定。

using Primes: factor

f(n, p, k) = # ...

function g(m::T, n::T) where {T<:Integer}
    # ...
    for A in Iterators.product((f(n, p, T(k)) for (p, k) in factor(m))...)
        # ...
    end
    # ...
end

请注意,f 是类型稳定的。变量 A 不是类型稳定的,因为乘积迭代器将根据 nm 的值返回不同大小的元组。如果有像产品迭代器这样的迭代器返回 Vector 而不是 Tuple,我相信类型不稳定性会消失。

有没有人建议在上面的代码中使 A 类型稳定?

【问题讨论】:

    标签: julia type-stability


    【解决方案1】:

    通过使用数组而不是元组来存储产品迭代器的结果,它可能会更加类型稳定。一种方法是使用 hcat 并将结果连接到一个固定大小的数组中。

    using Primes: factor
    using StaticArrays: hcat
    
    f(n, p, k) = # ...
    
    function g(m::T, n::T) where {T<:Integer}
        # ...
        A = hcat(f(n, p, T(k)) for (p, k) in factor(m))
        # ...
        end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 2014-09-08
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多