comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » index arrays of structures
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: index arrays of structures [message #59311 is a reply to message #59229] Sun, 16 March 2008 12:29 Go to previous messageGo to previous message
Vince Hradil is currently offline  Vince Hradil
Messages: 574
Registered: December 1999
Senior Member
Raghu wrote:
> On Mar 16, 5:49 am, Vince Hradil <hrad...@yahoo.com> wrote:
>> Raghu wrote:
>>> On Mar 15, 7:31�pm, Vince Hradil <hrad...@yahoo.com> wrote:
>>>> On Mar 15, 4:07 pm, Vince Hradil <hrad...@yahoo.com> wrote:
>>
>>>> > On Mar 15, 3:53 pm, Raghu <raghuram.narasim...@gmail.com> wrote:
>>
>>>> > > Hi,
>>
>>>> > > With reference to my recent posting (IDL batch indexing), i understood
>>>> > > that i could structures. However, i haven't been able to figure out
>>>> > > one step.
>>
>>>> > > Here is my code as of now:
>>>> > > ; I want to search for all the images(files) in the directory trials,
>>>> > > read them into the structure named data, and access each file within
>>>> > > the structure.
>>
>>>> > > pro strcutres
>>>> > > dir1='D:\trials'
>>>> > > cd,dir1
>>>> > > files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>>>> > > i=0
>>>> > > while i lt numfiles do begin
>>>> > > named=files(i)
>>>> > > print,named
>>>> > > data={ID:'a',sizes:fltarr(2179,761)}
>>>> > > data=replicate(data,numfiles)
>>>> > > data.sizes=findgen(numfiles)
>>>> > > openr,1,named
>>>> > > readu,1,data[i].sizes
>>>> > > close,1
>>>> > > i=i+1
>>>> > > endwhile
>>>> > > end
>>
>>>> > > ERROR message- READU: Expression must be named variable in this
>>>> > > context: <FLOAT � � Array[2179, 761]>.
>>
>>>> > > I am getting the error here because it seems like i am not able to
>>>> > > read in the LUN 1 or named, into data[i].sizes.
>>
>>>> > > Where am i going wrong ?
>>
>>>> > > Raghu
>>
>>>> > Hoo boy - here you go.
>>
>>>> > 1-Yes, you need to use a named variable to readu
>>>> > 2-You already defined "sizes" (weird name, by the way, how about
>>>> > "values"), when you made the structure.
>>
>>>> > How about this:
>>
>>>> > pro strcutres
>>>> > dir1='D:\trials'
>>>> > cd,dir1
>>>> > files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>>
>>>> > data={ID:'a',values:fltarr(2179,761)}
>>>> > data=replicate(data,numfiles)
>>>> > tempval = fltarr(2179,761)
>>
>>>> > for i=0L, numfiles-1 do begin
>>>> > named=files(i)
>>>> > print,named
>>
>>>> > openr,1,named
>>>> > readu,1,tempval
>>>> > free_lun,1
>>>> > data[i].values = tempval
>>
>>>> > endfor
>>
>>>> > return
>>>> > end
>>
>>>> BTW - why do you want to use a structure again? �The above code makes
>>>> all the data.id's = 'a'.
>>
>>>> Why can't you just read the data into a matrix? �If you want the
>>>> structure to contain the filename then add data[i].id = named inside
>>>> the loop.- Hide quoted text -
>>
>>>> - Show quoted text -
>>
>>> Hi,
>>
>>> Are you asking why i'm using structures in the first place ?
>>> If yes, my initial idea (from python lessons) was to create something
>>> like an empty array and then read in each file into this empty array
>>> by concatenation. That way each element would have a unique ID which i
>>> could use to access them.
>>> But it seems like i can't create an empty 2-d array of a certain size
>>> and number of files to be read ('numfiles' in my case).
>>> When you say create a matrix, is this what you meant ?
>>
>>> I got the idea of using structures only from responses in my previous
>>> emails on 'batch indexing'.
>>
>>> -R
>>
>> I guess I'm still confused. I was suggesting just doing:
>> data = fltarr(nx,ny,numfiles)
>>
>> then for each files[i] the image is data[*,*,i]
>>
>> It's unique simply by the index.- Hide quoted text -
>>
>> - Show quoted text -
>
> Hi Vince,
>
> I combined the ideas and it seems to have worked.
> The file_search method is storing the filenames in a string array. So,
> if i read them all one by one into data[*,*,numfiles-1], it is
> placing each files[i] into the corresponding location in data[*,*,i].
> This way i am able to access each file, and then compute the mean, for
> e.g.
>
> Here's the code:
>
> pro structures_simple
>
> dir1='D:\trials'
> cd,dir1
> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
> print,files
> print,numfiles
>
> data=fltarr(2179,761,numfiles)
>
> tempval = fltarr(2179,761)
> for i=0L, numfiles-1 do begin
> named=files(i)
>
> openr,1,named
> readu,1,tempval
> close,1
> data[*,*,i]=tempval
> avg=mean(data[*,*,i],/nan)
> print,avg
> help,data[*,*,i]
> endfor
>
> return
>
> end
>
> What do you think ?
>
> -Raghu

Yes. That's what kind of what I was thinking. Of course, if you just
want the average, then there is no need to use the nx by ny by
numfiles array, just the tempval.

tempval = fltarr(nx,ny,/nozero)
for i=0l, numfiles-1 do begin
openr, lun, files[i], /get_lun
readu, lun, tempval
free_lun, lun
print, files[i], ' ', mean(tempval,/nan)
endfor
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Re: Interactive Image Locations and Values
Next Topic: iTools hardware rendering

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Mon Oct 27 09:48:45 PDT 2025

Total time taken to generate the page: 1.20286 seconds