私は私はあなたの計画を理解している場合わかりません。しかし、おそらくこのような何かが助けることができますか? - >
baryone(t::T) where T<:Real = [1.]
baryone(t::T) where T<:Complex = [1im] # or whatever you like here
function baryweights(x::Array{T,1}) where T<:Number
n = length(x)
n == 1 && return baryone(x[1])
xmin,xmax = extrema(x) # don't forget fix extrema for complex! :)
x *= 4/(xmax-xmin)
#^Multiply by capacity of interval to avoid overflow
return [
1/prod(x[i]-x[j] for j in 1:n if j != i)
for i = 1:n
]
end
警告:私はまだ初心者です!私が試してみたら@code_warntype baryweights([1])
私はちょうどたくさんの警告を見る。 (もし私がbaryone
に電話するのを避けても)。たとえば、n
はAny
です。
function baryweights(x::Array{T,1}) where T<:Number
n = length(x)
n == 1 && return baryone(x[1])
xmin,xmax = extrema(x) # don't forget fix extrema for complex! :)
let y = x * 4/(xmax-xmin)
#^Multiply by capacity of interval to avoid overflow
return [
1/prod(y[i]-y[j] for j in 1:n if j != i)
for i = 1:n
]
end
end
EDIT2:
編集:私たちは別の変数(y)を使用している場合、今 I asked on discourseとは、その@code_warn
リターンより良い結果を参照してくださいCore.Box
EDになるようにy
を避けるために、私はlet
を追加しまし
何期待される結果ですか? 'baryweights([1,2,3]) 'と呼ぶと、パラメータが' Array {Int} 'であることを意味します。結果は' Array {Float64} 'です!あなたが指摘しているライン上の問題は本当ですか? – Liso
はい、それが望ましいです。戻り値の型を 'n> 1'の場合の戻り値と同じにしたいが、' n == 1 'を含む 'n = 1'の値についてはそうでなければならない。 – gTcV
しかし、ユースケースは何ですか?私は複素数を試しましたが、 'extrema'関数では動作しません。タイプが期待と異なる場合のいくつかの例を示してください。 – Liso