Re: function to check if array is empty
- To: mathgroup at smc.vnet.net
- Subject: [mg88454] Re: function to check if array is empty
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Mon, 5 May 2008 06:17:42 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <fvbr6d$plc$1@smc.vnet.net> <4819F79D.4020907@gmail.com>
Jean-Marc Gulliet wrote:
> will parr wrote:
>
>> is there a function that will check if an array is empty?
>> i'm looking for a function to return either True (or 1), or False (or
>> 0) when it checks an array. eg:
>> X = Array[0 &, {3, 3}]
>>
>> then test with function (called ArrayEmpty, for example)
>>
>> In: ArrayEmpty[X]
>>
>> Out: True
>
> If you deal only with m x n rectangular arrays (matrices) you could use
>
> ArrayEmptyQ[arr_List] := MatrixQ[arr, (# == 0 &)]
>
> A more general function would be
>
> ArrayEmptyQ[arr_List] :=
> If[Count[arr, x_ /; x != 0, -1] != 0, False, True]
>
> For instance,
>
> X = Array[0 &, {3, 3}]
> ArrayEmptyQ[arr_List] := MatrixQ[arr, (# == 0 &)]
> ArrayEmptyQ[X]
> X[[1, 2]] = 1;
> X
> ArrayEmptyQ[X]
>
> {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}
>
> True
>
> {{0, 1, 0}, {0, 0, 0}, {0, 0, 0}}
>
> False
If speed is important, using *Total* and *Unitize* (to prevent
cancellation of terms with same magnitude but opposite signs) will be
faster than the above solution.
In[1]:= X = Array[0 &, {3, 3}]
ArrayEmptyQ[arr_List] := Total[Unitize[arr], Infinity] == 0
ArrayEmptyQ[X]
X[[1, 2]] = 1; X[[1, 3]] = -1;
X
ArrayEmptyQ[X]
X = Array[0 &, {1000, 1000}];
Timing@ArrayEmptyQ[X]
Out[1]= {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}
Out[3]= True
Out[5]= {{0, 1, -1}, {0, 0, 0}, {0, 0, 0}}
Out[6]= False
Out[8]= {0.015834, True}
In[9]:= Total[X, -1] == 0
Out[9]= True
In[10]:= X = Array[0 &, {3, 3}]
ArrayEmptyQ[arr_List] := MatrixQ[arr, (# == 0 &)]
ArrayEmptyQ[X]
X[[1, 2]] = 1; X[[1, 3]] = -1;
X
ArrayEmptyQ[X]
X = Array[0 &, {1000, 1000}];
Timing@ArrayEmptyQ[X]
Out[10]= {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}
Out[12]= True
Out[14]= {{0, 1, -1}, {0, 0, 0}, {0, 0, 0}}
Out[15]= False
Out[17]= {0.714124, True}
Regards,
-- Jean-Marc