MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

DirectSum (feature request)

  • To: mathgroup at
  • Subject: [mg97780] DirectSum (feature request)
  • From: Maris Ozols <marozols at>
  • 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~

  • Prev by Date: How do I DistributeDefinitions inside a function?
  • Next by Date: Re: Plotting on an image
  • Previous by thread: Re: How do I DistributeDefinitions inside a function?
  • Next by thread: Re: DirectSum (feature request)