Of course, I am biased but I think the approach that we use in JuliaGaussianProcesses packages such as KernelFunctions and AbstractGPs for how to deal with observations as rows or columns is very nice to work with, both from a developer and a user perspective: you clearly state the layout of your matrix by wrapping it as a ColVecs
or RowVecs
, and so there is no confusion about the layout, no conventions are needed (which IMO are always somewhat arbitrary), and one does not have to carry around an obsdim
keyword argument to all function calls. The documentation of KernelFunctions explains the motivation and advantages of this approach: Design · KernelFunctions.jl
7 Likes