gpt4 book ai didi

julia - 从数字数组中获取数字

转载 作者:行者123 更新时间:2023-12-05 08:31:47 25 4
gpt4 key购买 nike

为了将数字拆分为给定基数中的数字,Julia 使用了 digits()功能:

julia> digits(36, base = 4)
3-element Array{Int64,1}:
0
1
2

什么是反向操作?如果您有一组数字和基数,是否有内置方法将其转换为数字?我可以将数组打印成字符串并使用 parse() ,但这听起来效率很低,而且对于大于 10 的碱基也不起作用。

最佳答案

前面的回答都对,但是还有效率问题:

sum([x[k]*base^(k-1) for k=1:length(x)])

在求和之前将数字收集到一个数组中,这会导致不必要的分配。跳过括号以获得更好的性能:

sum(x[k]*base^(k-1) for k in 1:length(x))

这还在求和之前分配了一个数组:sum(d.*4 .^(0:(length(d)-1)))

不过,如果您真的想要良好的性能,请编写一个循环并避免重复求幂:

function undigit(d; base=10)
s = zero(eltype(d))
mult = one(eltype(d))
for val in d
s += val * mult
mult *= base
end
return s
end

这有一个额外的不必要的乘法,你可以试着想办法跳过它。但在我的测试中,性能比其他方法好 10-15 倍,并且分配为零。<​​/p>

编辑:上面的类型处理实际上有一点风险。如果输入向量和 base 具有不同的整数类型,则可能会出现类型不稳定性。这段代码应该表现得更好:

function undigits(d; base=10)
(s, b) = promote(zero(eltype(d)), base)
mult = one(s)
for val in d
s += val * mult
mult *= b
end
return s
end

关于julia - 从数字数组中获取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55524985/

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