octave-bug-tracker
[Top][All Lists]

## [Octave-bug-tracker] [bug #48690] basic statistics functions should retu

 From: Nicholas Jankowski Subject: [Octave-bug-tracker] [bug #48690] basic statistics functions should return NaN on empty input Date: Wed, 26 Jul 2017 13:07:48 -0400 (EDT) User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0

```Follow-up Comment #24, bug #48690 (project octave):

just want to confirm that yes, I don't have any tests checking the mode(X,DIM)
codepath, and it does fail there.

Matlab 2017a:

&amp;gt;&amp;gt; mode([])
Warning: MODE of a 0-by-0 matrix is NaN; result was an empty matrix in
previous
releases.
&amp;gt; In mode (line 69)
ans =
NaN
&amp;gt;&amp;gt; mode([],1)
ans =
1×0 empty double row vector
&amp;gt;&amp;gt; mode([],2)
ans =
0×1 empty double column vector
&amp;gt;&amp;gt; mode([],3)
ans =
[]

Octave 4.2.1 (release)

&amp;gt;&amp;gt; mode([])
ans = [](1x0)
&amp;gt;&amp;gt; mode([],1)
ans = [](1x0)
&amp;gt;&amp;gt; mode([],2)
ans = [](0x1)
&amp;gt;&amp;gt; mode([],3)
ans = [](0x0)

in my modified mode, it short circuits to NaN without checking dim:

&amp;gt;&amp;gt; mode([])
ans = NaN
&amp;gt;&amp;gt; mode([],1)
ans = NaN
&amp;gt;&amp;gt; mode([],2)
ans = NaN
&amp;gt;&amp;gt; mode([],3)
ans = NaN

the rest of your summary of the empty nD matrix handling is generally correct.
for all cases other than 0x0 the first nonsingleton dimension is changed to 1
and the rest are left alone.

The code does currently change the fist non-singleton dim (not just the first
dim greater than 1) to 1 with:

sz (find ((sz ~= 1), 1)) = 1;

and no need to use resize, since the output is just based on sz, not x.  just
change sz(2) = 1.  then it can move through the &quot;not 0x0&quot; codepath
as you said.

This, however, does create issues the dimensions of f and c.  looking into
that now.  I've appended a number of additional test based on matlab 2017a
output in addition to the ones that were already in there:

## Tests for empty input with DIM call
%!test
%! [m, f, c] = mode ([], 1);
%! assert (m, NaN (1,0));
%! assert (f, zeros (1,0));
%! assert (c, {(NaN (1,0))});

%!test
%! [m, f, c] = mode ([], 2);
%! assert (m, NaN (0,1));
%! assert (f, zeros (0,1));
%! assert (c, {(NaN (0,1))});

%!test
%! [m, f, c] = mode ([], 3);
%! assert (m, []);
%! assert (f, []);
%! assert (c, {});

%!test
%! [m, f, c] = mode (single([]), 1);
%! assert (m, single(NaN (1,0)));
%! assert (f, double(zeros (1,0)));
%! assert (c, {(NaN (1,0))});

%!test
%! [m, f, c] = mode (single([]), 2);
%! assert (m, single(NaN (0,1)));
%! assert (f, zeros (0,1));
%! assert (c, {(NaN (0,1))});

%!test
%! [m, f, c] = mode ([], 3);
%! assert (m, single([]));
%! assert (f, []);
%! assert (c, {});

%!test
%! [m, f, c] = mode (ones(0,0,1), 1);
%! assert (m, NaN (1,0));
%! assert (f, zeros (1,0));
%! assert (c, {(NaN (1,0))});

%!test
%! [m, f, c] = mode (ones(0,0,1), 2);
%! assert (m, NaN (0,1));
%! assert (f, zeros (0,1));
%! assert (c, {(NaN (0,1))});

%!test
%! [m, f, c] = mode (ones(0,0,1), 3);
%! assert (m, []);
%! assert (f, []);
%! assert (c, {});

%!test
%! [m, f, c] = mode (ones(1,0,1), 1);
%! assert (m, NaN (1,0));
%! assert (f, zeros (1,0));
%! assert (c, {(NaN (1,0))});

%!test
%! [m, f, c] = mode (ones(1,0,1), 2);
%! assert (m, NaN);
%! assert (f, 0);
%! assert (c, {(NaN (1,0))});

%!test
%! [m, f, c] = mode (ones(1,0,1), 3);
%! assert (m, NaN (1,0));
%! assert (f, zeros (1,0));
%! assert (c, {(NaN (1,0))});

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?48690>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/

```

reply via email to