octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: colon equivalence when deleting elements


From: pkienzle
Subject: Re: colon equivalence when deleting elements
Date: Fri, 17 Oct 2003 06:17:05 +0100

On 13 Oct 2003 at 11:00, John W. Eaton wrote:

> There is a current thread in comp.soft-sys.matlab about the subtleties
> of indexing when deleting elements of a matrix.  For example, in
> Matlab,
> 
>   a = 1; a(:,:) = []
> 
> results in a 0x1 empty matrix.  This doesn't make much sense to me,
> but apparently it is working one dimension at a time or something.

Consider

        a = [1 2; 3 4; 5 6];

a(1:2,:) = []  results in a 1x2 matrix, so by extension 
a(1:3,:) should be 0x2, which it is.

Similarly, a(:,1) = [] results in a 3x1 matrix, so by extension 
a(:,1:2) should be 3x0, which it is.

The a(:,:) = [] case is ambiguous and IMHO should be
disallowed.

> Also, the following
> 
>   a = 1;  a(1,1) = []
>
> is not allowed ("Indexed empty matrix assignment is not allowed).
> Apparently at least one of the indices must be a colon.

For an N-d array, N-1 of the dimensions must be a colon
so that the entire slice is removed.  If not then you would get
surprising results, such as a(i,j) = [] deleting all of row i and
all of column j.

> Octave currently checks to see if the index is equivalent to a colon
> operator (i.e., it enumerates all possible indices) and if so, works
> the same as if a colon had been used.

I think it is better to be consistent in this case and either disallow
it or do the surprising thing regardless of whether or not i and j
happen to span their entire dimension.

> Should Octave be changed to be exactly compatible for these cases?

I would disallow both and see if it becomes a problem in 
the future.  I don't think it will since (a) I don't expect it to
occur often and (b) when it occurs the program does not
silently give a different answer.

Paul Kienzle
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]