MathGroup Archive 1995

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

Search the Archive

Re: RealDigits

  • To: mathgroup at
  • Subject: [mg1840] Re: [mg1741] RealDigits
  • From: Count Dracula <lk3a at>
  • Date: Mon, 7 Aug 1995 20:25:08 -0400
  • Organization: University of Virginia

In Article: 1118 of comp.soft-sys.math.mathematica
wagner at bullwinkle.cs.Colorado.EDU (Dave Wagner) writes:

> MapIndexed.  It turns out to be
> the perfect function for checking a matrix to see if it satisfies a
> certain form.  For example, the following function checks a matrix
> to see if it is diagonal:

>    DiagonalQ[m_] :=
>	And @@ Flatten[ MapIndexed[ #1==0 || Equal @@ #2 &, m, {2} ]]

MapIndexed used like this is far from being the perfect function 
for this task. This is a very inefficient way to check if a
matrix is diagonal. The best way will probably use a method 
that stops at the first encounter with one nonzero nondiagonal 
element. But even the naive function below is faster than 
DiagonalQ :

diagonalQ[m_?MatrixQ] := 
  Block[{n, row},
    n = Length[m];
    row = Table[0, {n - 1}];
    And @@ Map[Equal[#1, row]&, MapThread[Drop, {m, Partition[Range[n], 1]}]]
       ] /; SameQ @@ Dimensions[m]

mat = DiagonalMatrix[Range[150]]

test := {Timing[diagonalQ[mat]], Timing[DiagonalQ[mat]]}

Test run on an IBM RS6000:

In[6]:= test

Out[6]= {{0.11 Second, True}, {3.57 Second, True}}

Levent Kitis           lk3a at    lk3a at
University of Virginia Department of Mechanical, Aerospace, and Nuclear Engineering  

  • Prev by Date: Starting a remote kernel
  • Next by Date: MLReady()
  • Previous by thread: Re: RealDigits
  • Next by thread: Re: RealDigits