DirectSum (feature request)
- To: mathgroup at smc.vnet.net
- Subject: [mg97780] DirectSum (feature request)
- From: Maris Ozols <marozols at gmail.com>
- Date: Sat, 21 Mar 2009 05:19:06 -0500 (EST)
Taking a direct sum of a given list of matrices is a very common task (unless you are a quantum physicist and use only KroneckerProduct). Unfortunately there is no built-in function (that I know of) for doing this in Mathematica. The closest thing we have is ArrayFlatten. So I usually do something like this to compute a direct sum: DirectSum[Ms_] := Module[{n = Length[Ms], z, i}, z = ConstantArray[0, n]; ArrayFlatten@Table[ReplacePart[z, i -> Ms[[i]]], {i, 1, n}] ]; Is there a better way of doing this? Note: A nice way to implement it would be DirectSum[Ms_] := ArrayFlatten@DiagonalMatrix[Ms]; Unfortunately this gives "DiagonalMatrix::vector" error, since DiagonalMatrix is not flexible enough to accept a list of matrices. The way DiagonalMatrix is used in the above code might cause some confusion for beginners, but in general I don't see why DiagonalMatrix should be limited in this way. ~Maris Ozols~
- Follow-Ups:
- Re: DirectSum (feature request)
- From: Adriano Pascoletti <adriano.pascoletti@dimi.uniud.it>
- Re: DirectSum (feature request)