On Tue, Jul 27, 2010 at 07:51, Skipper Seabold <jsseab...@gmail.com> wrote: > On Mon, Jul 26, 2010 at 10:05 PM, Alan G Isaac <ais...@american.edu> wrote: >> But I am still confused about the use case. >> What is the scalar- (or 1d-array-) returning procedure >> invokedbefore taking the determinant? > > Recently I ran into this trying to make the log-likelihood of a > multivariate and univariate autoregressive process use the same > function. One has log(sigma_scalar) and one calls for > logdet(Sigma_matrix). I also ran in to again yesterday working on the > Kalman filter, depending on the process being modeled and how the user > writes a function if the needed coefficient arrays depend on > parameters. To be more general, I have to put in atleast_2d, even > though these checks are really in slogdet.
Not necessarily. In this context, you are treating a scalar as a 1x1 matrix. Or rather, in full generality, you have a 1x1 matrix and 1-element vectors and only doing operations on them that map fairly neatly onto a subset of scalar properties. Consequently, you can use scalars in their place without much problem (to add confusion, the scalar case was formulated first, then generalized to the multivariate case, but that doesn't change the mathematics unless if you believe certain ethnomathematicians). However, there are other contexts in which scalars are used where the determinant would come into play. For example, scalar-vector multiplication is defined. If you have an n-vector, then scalar-vector multiplication behaves like matrix-vector multiplication provided that the matrix is a diagonal matrix with the diagonal entries each being the scalar value. In this context, the determinant is not just the scalar value itself, but rather value**n. Many of the references you found stating that the "determinant of a scalar value is" the scalar itself were actually referring to 1x1 matrices, not true scalars. 1x1 matrices behave like scalars, but not all scalars behave like 1x1 matrices. linalg.det() does not know the context in which you are treating the scalar, so it rightly complains. That said, I expect you will be running into this 1x1<->scalar special case reasonably frequently in statsmodels. Writing a dwim_logdet() utility function there that does what you want is a perfectly reasonable thing to do. -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion