Factor multiplication values: incorrect reshape?

I can’t get Cvaluespace to output the correct values, identical to table 3.

I think it has to do with reshape, notebook is below.
https://github.com/hpoit/DFactor.jl/blob/master/function%20DFmultiply.ipynb

Thanks

It is impossible to run your notebook without the `BN` module.

1 Like

This seems to be a rather strange mathematical operation; I don’t even know the name for it.

Writing it in index notation, if `A` and `B` are the objects on the left and `M` the object on the right, we have

``````M[i, j, k] = A[i, j] * B[j, k]
``````

Now we translate that to Julia:

``````julia> v1 = [0.5, 0.8, 0.1, 0, 0.3, 0.9];   # raw data

julia> v2 = [0.5, 0.7, 0.1, 0.2];

julia> A = reshape(v1, 2, 3)'
3×2 Array{Float64,2}:
0.5  0.8
0.1  0.0
0.3  0.9

julia> B = reshape(v2, 2, 2)'
2×2 Array{Float64,2}:
0.5  0.7
0.1  0.2

julia> M = [A[i, j] * B[j, k] for i in 1:size(A,1), j in 1:size(A,2), k in 1:size(B,2)]
3×2×2 Array{Float64,3}:
[:, :, 1] =
0.25  0.08
0.05  0.0
0.15  0.09

[:, :, 2] =
0.35  0.16
0.07  0.0
0.21  0.18
``````

Thanks @dpsanders. The figure is from Prof. Daphne Koller’s Bayesian Networks, and the original code is from Wang Lei’s DiscreteFactor.jl.

Keep in mind it needs to work for tables of arbitrary size. @hpoit should check that this works for tables with more variables and varied cardinalities.

There is a new discrete factor implementation in BayesNets.jl that may be of use.

1 Like