Re: RealDigits
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1853] Re: [mg1741] RealDigits
- From: Roman Maeder <maeder at inf.ethz.ch>
- Date: Mon, 7 Aug 1995 20:27:27 -0400
- Organization: Computer Science, ETH Zurich
Count Dracula writes: > ... 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}} > even faster and certainly simpler: dQ[m_?MatrixQ] /; SameQ @@ Dimensions[m] := m == DiagonalMatrix[Transpose[m, {1, 1}]] (note: Transpose[m, {1, 1}] returns the list of diagonal elements.) In[3]:= test[m_] := {Timing[diagonalQ[m]], Timing[dQ[m]]} In[4]:= mat1 = DiagonalMatrix[Range[500]]; In[5]:= test[mat1] Out[5]= {{0.9 Second, True}, {0.666667 Second, True}} test with a non-diagonal matrix: In[6]:= mat2 = ReplacePart[mat1, 55, {5, 3}]; In[7]:= test[mat2] Out[7]= {{0.866667 Second, False}, {0.566667 Second, False}} Roman Maeder