[SciPy-User] numpy.array of mixed type.

Robert Kern robert.kern@gmail....
Sun Apr 25 09:52:30 CDT 2010

```On Thu, Apr 22, 2010 at 10:16, Éric Depagne <edepagne@lcogt.net> wrote:
> Le mercredi 21 avril 2010 17:27:14, Charles R Harris a écrit :
>> On Wed, Apr 21, 2010 at 9:49 AM, Éric Depagne <edepagne@lcogt.net> wrote:
>> > Hi.
>> >
>> > I'd like to create an array that would contain data of two different
>> > types: str and float64.
>> >
>> > I've created a dtype accordingly :
>> > dt = dtype({'names': ['Type', 'Chisquare'], 'formats': ['S8', float64]})
>> > then, I initialise my array as follow:
>> > temp = zeros ((1,1), dtype = dt)
>> >
>> > that gives me the following:
>> > array([[('', 0.0)]],
>> >      dtype=[('Type', '|S8'), ('Chisquare', '<f8')])
>> >
>> > which is almost good.
>> >
>> > I'd like to know if it is possible instead of having an array with one
>> > column
>> > that will contain a tuple, to create an array with two columns,  the
>> > first column being a str and the second a float.
>>
>> It's not a tuple, it is just displayed that way, it is more like a packed c
>> structure. But no, you can't have *actual* ndarray columns of different
>> types. What problem do you have with using the dtype?
>
> I tried to sort my array along the Chisquare column and could not.
> temp.sort (axis = 0) sorts along the column named Type, but I can't find a way
> to sort along Chisquare. Is it possible?

Use numpy.lexsort()

i = numpy.lexsort([myarray['Chisquare']])
sorted_array = myarray[i]

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
```