如何解决是否可以在 Julia 中将 Array{Num,1} 转换为 Array{Float64,1}?
我有以下在 Julia 中使用符号的函数。一切正常,直到绘图的那一刻
using distributions
using Plots
using Symbolics
using SymbolicUtils
function BinomialMeasure(iter::Int64,p::Float64,current_level = nothing)
@variables m0 m1
if current_level == nothing
current_level = [1]
end
next_level = []
for item in current_level
append!(next_level,m0*item)
append!(next_level,m1*item)
end
If iter != 0
current_level = next_level
return BinomialMeasure(iter - 1,p,current_level)
else
return [substitute(i,Dict([m0 => p,m1 => 1 - p])) for i in next_level]
end
end
y = BinomialMeasure(10,0.4)
x = [( i + 1 ) / length(y) for i = 1:length(y) ]
append!(x,0)
append!(y,0)
plot(x,y)
然后它返回以下内容:
MethodError: no method matching AbstractFloat(::Num)
Closest candidates are:
AbstractFloat(::Real,!Matched::RoundingMode) where T<:AbstractFloat at rounding.jl:200
AbstractFloat(::T) where T<:Number at boot.jl:716
AbstractFloat(!Matched::Bool) at float.jl:258
y 是一个数组{Num,1},x 是一个数组{Float64,1}。
我尝试了 map(float,y)、convert(float,y) 和 float(y),但我认为不可能将类型 Num 转换为 Float64,或者至少我不知道该怎么做.
解决方法
您可以在不使用 val
和 string
的情况下访问字段 parse
y_val = [i.val for i in y]
这当然比解析字符串有更好的性能
,看看其他答案
通过简要阅读有关 Symbolics 的论坛帖子,我的理解是,您并不是真的“应该”从符号中获取实际值。作为一个hacky解决方法,你可以做
{{1}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。