# IDL's handling of LOGICAL quantities (WHERE)

• Subject: IDL's handling of LOGICAL quantities (WHERE)
• From: James Tappin <sjt(at)star.sr.bham.ac.uk>
• Date: Tue, 12 Oct 1999 15:17:27 +0100
• Newsgroups: comp.lang.idl-pvwave
• Organization: Astrophysics & Space Research, University of Birmingham
• Xref: news.doit.wisc.edu comp.lang.idl-pvwave:16816

\begin{rant}
I've finally decided to have a public moan about one of the weaknesses of IDL's
handling of logical operations: to boot -- that the WHERE function  follows
a C-like interpretation while most other things are  Fortran-like.

for example suppose we have an array (m)  some of whose values are NaN  then the
(inefficient) loop:
for j=0, n_elements(m) do if not finite(m(j)) then m(j)=0
will set all non-finite elements of m to 0.
However:
m(where(not finite(m))) = 0
will zero out the whole array since where sees (not 1) as a Yes.
[The correct solution is of course:
m(where(finite(m) ne 1)) = 0
]

Or a simpler example:
IDL> a = [0, 1, 0, 1]
IDL> print, where(a eq 0)
0           2
IDL> print, where(not (a ne 0))
0           1           2           3

I guess the proper answer isto have  aproper  logical or boolean type and
functions like FINITE and logical operations should return it, and of course
WHERE should accept it.

\end{rant}

--
+------------------------+-------------------------------+---------+
| James Tappin           | School of Physics & Astronomy |  O__    |
| sjt@star.sr.bham.ac.uk | University of Birmingham      | --  \/ |
| Ph: 0121-414-6462. Fax: 0121-414-3722                  |         |
+--------------------------------------------------------+---------+

`