Skip to content

Broadcasting pdf/logpdf over UnivariateFiniteArrays - some corner cases #15

Description

@ablaom

Two corner cases previously not accounted for:

First is a bug: The following works as expected:

julia> v = UnivariateFinite(["M", "F"], [0.5 0.5; 0.4 0.6], pool=missing)
2-element UnivariateFiniteVector{Multiclass{2}, String, UInt8, Float64}:
 UnivariateFinite{Multiclass{2}}(M=>0.5, F=>0.5)
 UnivariateFinite{Multiclass{2}}(M=>0.4, F=>0.6)

julia> pdf(v, ["M", "F"])
2×2 Matrix{Float64}:
 0.5  0.5
 0.4  0.6

However, this should probably also work but doesn't:

julia> v = UnivariateFinite[v...]
2-element Vector{UnivariateFinite}:
 UnivariateFinite{Multiclass{2}}(M=>0.5, F=>0.5)
 UnivariateFinite{Multiclass{2}}(M=>0.4, F=>0.6)

julia> pdf(v, ["M", "F"])
ERROR: MethodError: no method matching pdf(::Vector{UnivariateFinite}, ::Vector{String})

Second is an optimization: (see comment below)

This works, but is does not use one of the optimised methods for broadcasting we have in src/univariatefinite/arrays:

pdf.(v, levels.(v))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions