[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: manipulation of matrix elements
From: 
John W. Eaton 
Subject: 
Re: manipulation of matrix elements 
Date: 
Thu, 16 Dec 1999 11:27:21 0600 (CST) 
On 16Dec1999, Michael Roth <address@hidden> wrote:
 However, I get different results, if the condition is fulfilled for an
 entire row or column.

 For example for the matrix s=[0.3 0.3; 0.7 0.7]

 you get with [i,j]=find(s<=0.5);s(i,j)=0.5

 in octave  in matlab (Version 5.2.0.3084)
 
 s = 0.5000 0.5000  s = 0.5000 0.5000
 0.5000 0.5000  0.7000 0.7000
What version of Octave? with 2.0.14, I get:
GNU Octave, version 2.0.14 (i686pclinuxgnu).
Copyright (C) 1996, 1997, 1998, 1999 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.
octave:1> s=[0.3 0.3; 0.7 0.7]
s =
0.30000 0.30000
0.70000 0.70000
octave:2> [i,j]=find(s<=0.5);s(i,j)=0.5
s =
0.50000 0.50000
0.70000 0.70000
Which is correct, but maybe not for the reason you are thinking.
I.e., it does not do the equivalent of:
for ii = 1:2
for jj = 1:2
s(i(ii),j(jj)) = RHS;
endfor
endfor
Instead, it sets all the values specified by the intersection of the
rows i and columns j to the RHS value. when the rows or columns are
all the same, it appears to be equivalent to the loop above.
Ah, I just realized that if you are going for maximum Matlab
compatibility, then you probably have prefer_zero_one_indexing set to
a nonzero value. If so, I think that is the reason for the trouble,
and why you see the different result. Check out the documentation for
that variable. If you still don't see why you end up getting all the
elements set to the RHS value for the case above, post a message to
the helpoctave mailing list.
FWIW, this ambiguity in the language is avoided in the development
versions of Octave by introducing a new boolean data type (like
Matlab's logical type, which was introduced in Matlab 5) and requiring
`zeroone' style indexing to be done with boolean objects instead of
just vectors of ones and zeros.
jwe

Octave is freely available under the terms of the GNU GPL.
Octave's home on the web: http://www.che.wisc.edu/octave/octave.html
How to fund new projects: http://www.che.wisc.edu/octave/funding.html
Subscription information: http://www.che.wisc.edu/octave/archive.html
