owl icon indicating copy to clipboard operation
owl copied to clipboard

How do I use gaussian_pdf in Owl.Arr?

Open LongPham7 opened this issue 2 years ago • 2 comments

I'm struggling to figure out how to use the function gaussian_pdf : mu:arr -> sigma:arr -> arr -> arr in the Owl.Arr module. When I tried the following code in the top level (i.e. OCaml's REPL), it crashes due to a segmentation fault:

#require "owl";;
open Owl;;
let mu_arr = Arr.init [|2|] (fun _ -> 1.);;
Arr.set mu_arr [|1|] 4.;; (* Set the second element of mu_arr to 4. *)
let sigma_arr = Arr.init [|2|] (fun _ -> 0.1);;
let current_point = Arr.init [|2|] (fun _ -> 1.5);;
let result_arr = Arr.gaussian_pdf ~mu:mu_arr ~sigma:sigma_arr current_point;;

I managed to figure out how to use gaussian_rvs, but gaussian_pdf still eludes me. Thanks a lot in advance!

LongPham7 avatar Jan 18 '23 16:01 LongPham7

I don't get a segfault but I get nonsensical results (~1E-22). There must be a bug in Arr.gaussian_pdf. The scalar version Stats.gaussian_pdf works fine. I don't have time to chase this now but perhaps @jzstark can take a look?

ghennequin avatar Jan 19 '23 14:01 ghennequin

Hi @ghennequin. It's interesting that you didn't get a segmentation fault. I think the low value in your result (~1E-22) makes sense because I accidentally set sigma to a very low value (0.1) in the above example.

Nonetheless, even if I use a larger (and more reasonable) value for sigma, I still get a segmentation fault. Specifically, the following simpler code produces a segmentation fault:

#require "owl";;
open Owl;;
let mu_arr = Arr.zeros [|2|];;
let sigma_arr = Arr.ones [|2|];;
let current_point = Arr.ones [|2|];;
let result_arr = Arr.gaussian_pdf ~mu:mu_arr ~sigma:sigma_arr current_point;;

My OS is Ubuntu.

LongPham7 avatar Jan 19 '23 19:01 LongPham7