[SciPy-user] Easy way to make a block diagonal matrix?
Thu May 21 08:38:01 CDT 2009
> On Wed, May 20, 2009 at 9:32 PM, Bruce Southey <firstname.lastname@example.org> wrote:
>> On Wed, May 20, 2009 at 7:23 PM, <email@example.com> wrote:
>>> 2009/5/20 Stéfan van der Walt <firstname.lastname@example.org>:
>>>> 2009/5/21 <email@example.com>:
>>>>> scipy.linalg has some matrix creation functions, some look like
>>>> Thanks, that looks like a good spot.
>>>> Please review the attached patch (if anybody does not want it to go
>>>> in, now is a good time to voice your concerns).
>>> It might be better to preserve the dtype of the input arrays, e.g. I
>>> could think of a use for integer variables, e.g. dummy variables in
>>> regression or anova, or to allow an option for the dtype when you
>>> create the zeros array.
>>> I don't know if anybody would want complex or character matrices.
>>> I just checked, np.kron and np.diag preserves integer type, and
>>> np.kron converts to float for mixed types, diag preserves character
>>> otherwise it looks good and useful to me.
>>> SciPy-user mailing list
>> What is the definition that you are using for a block diagonal matrix?
>> Some definitions use square matrices:
>> But Matlab's blkdiag function does not and, thus, it may not result in
>> a diagonal matrix:
> Since it's just a useful function and not a mathematical concept, I
> think the meaning is clear from the construction and example, although
> the matlab explanation is more informative.
I disagree because block diagonal does have a special meaning and the
result is not a diagonal matrix!
> If all individual component matrices are square, then you get the
> wikipedia definition.
My understanding is that only if the inputs are diagonal matrices will
you get a block diagonal matrix from this function.
> But for regression with panel data or with dummy variables, the
> analogy to kronecker product is better, component matrices have many
> rows (observations) and only a few columns (regressors). I would have
> to look it up again, but I think the design matrix for a seemingly
> unrelated regression (SUR) would be just block_diag(x1,x2,...xn) and
> endogenous variable is vstack(y1,y2,...yn), I'm not sure what matrix
> operation (kronecker product) would yield the covariance matrix in one
> (there is only a stub at
> http://en.wikipedia.org/wiki/Seemingly_unrelated_regression and it
> doesn't look completely correct to me)
> The wikipedia page has more types of block matrices, and maybe some of
> them also have general use cases.
> I haven't gotten around yet to program anything for panel data or SUR,
> so I don't know what else might be needed.
I am not discounting the function because I am well aware of the
potential uses of this (but not SUR models as I prefer the more general
multivariate and mixed models). Rather I am objecting to the name
because it does not return a block diagonal matrix.
More information about the SciPy-user