Support missing values in dot
#42812
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is more consistent with matrix product, which propagates
missing
automatically since*
and+
are defined for it.This is needed to avoid a regression in
Statistics.cov
in Julia 1.7 compared with 1.6. https://github.com/JuliaLang/Statistics.jl/pull/85 replaced a call tosum(conj(y[i])*x[i] for i in eachindex(y, x))
withdot(y, x)
, which is numerically more stable and was originally used before Statistics was moved to the stdlib (at the time LinearAlgebra was still in Base sodot
could not be used from an stdlib). But this change currently makescov
throw an error when the input containsmissing
, which was not the case in Julia 1.6. This currently makes StatsBase tests fail on Julia 1.7.EDIT: a solution in Statistics is to use
adjoint(y) * x
instead ofdot(y, x)
, as the former falls back to the latter for arrays ofNumber
s but tosum(uu*vv for (uu, vv) in zip(u, v))
for other types. See https://github.com/JuliaLang/Statistics.jl/pull/94. Though it can still be useful to support missing values withdot
.