[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## Re: cs-lists, structure arrays ....

**From**: |
David Bateman |

**Subject**: |
Re: cs-lists, structure arrays .... |

**Date**: |
Tue, 05 Apr 2005 12:36:45 +0200 |

**User-agent**: |
Mozilla Thunderbird 0.8 (X11/20040923) |

Shai Ayal wrote:

Hi all,

`I'm getting a bit lost in the list/cell/structure constructs. My data
``is most naturally adapted to be in a array of structures:
`
data(1).name="Shai"
data(1).height=189
data(1).weight="undisclosed"
data(2).name="....
now, how do I extract the heights of everyone ?

`data(:).height gives me a "cs-list" type which is no-where documented
``and I can't seem to convert it to a vector (or in fact to anything).
``The only way I found is using a for loop on the structure array
`
hh=zeros(1,length(data));
for i=1:length(data), hh(i)=data(i).height; endfor
but this is not very "comfortable".

`Also, if you have any suggestions on better data-structures to hold
``this kind of data feel free
`
Shai

With 2.9.1 I have

`octave:1> data(1).name="Shai"; data(1).height = 189; data(1).weight =
``"undisclosed";
`octave:2> data(2).name="David"; data(2).height = 175; data(2).weight = 70;
octave:3> data(:).name
ans =
(,
[1] = Shai
[2] = David
,)

`as you say this is a cs-list (see the round brackets). Now consider the
``matlab way of doing this
`

`>> data(1).name='Shai'; data(1).height = 189; data(1).weight =
``'undisclosed';
`>> data(2).name='David'; data(2).height = 175; data(2).weight = 70;
>> data(:).name
ans =
Shai
ans =
David
>> x = cell (size(data)); [x{:}] = data(:).name
x =
'Shai' 'David'

`We can't yet do "[x{:}] = ..." in octave and in any case it doesn't seem
``that "[x, y] = ..." is valid either. I think octave should allow "[a0,
``a1, ...] = cs_list"... However there is another way, consider
``"[data.height]"
`
octave:4> [data.height]
ans =
189 175
which also works in matlab... However
octave:5> [data.name]
ans = ShaiDavid
octave6> [data(:).name]
ans = ShaiDavid

`which gives exactly the same result in matlab, which is frankly not that
``useful. So the only way I see to deal with strings in a structure array
``is if octave allowed "[a0, a1, ...] = cs_list" and frankly you'd also
``need "[x{:}] = cs_list". I'm not sure how much effort that would be to
``implement though...
`
Cheers
David
--
David Bateman address@hidden

`Motorola Labs - Paris +33 1 69 35 48 04 (Ph)
``Parc Les Algorithmes, Commune de St Aubin +33 1 69 35 77 01 (Fax)
``91193 Gif-Sur-Yvette FRANCE
`

`The information contained in this communication has been classified as:
``
``[x] General Business Information
``[ ] Motorola Internal Use Only
``[ ] Motorola Confidential Proprietary
`
-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.
Octave's home on the web: http://www.octave.org
How to fund new projects: http://www.octave.org/funding.html
Subscription information: http://www.octave.org/archive.html
-------------------------------------------------------------