Re: RealDigits

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg1840] Re: [mg1741] RealDigits
• From: Count Dracula <lk3a at kelvin.seas.virginia.edu>
• 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 cars.mech.virginia.edu    lk3a at kelvin.seas.virginia.edu
University of Virginia Department of Mechanical, Aerospace, and Nuclear Engineering

```

• Prev by Date: Starting a remote kernel