[Python] TypeError: float argument required, not numpy.void

Daniele Varrazzo piro a develer.com
Mer 15 Feb 2012 03:02:48 CET


On Tue, 14 Feb 2012 22:55:52 +0100, Daniele Zambelli wrote:
> Sto lavorando con numpy, ho creato una struttura che contiene alcuni
> dati, ma quando tento di salvare l'array usando la funzione 
> np.savetxt
> ottengo un errore per me poco comprensibile. Riporto un pezzo di
> codice e l'errore:
>
> irt = [('x', float), ('y', float), ('size', float)]
> dt = np.dtype([('time', int),
>                ('acc', [('x', float), ('y', float), ('z', float)]),
>                ('ir', [('ir0', irt), ('ir1', irt),
>                        ('ir2', irt), ('ir3', irt)]),
>               ])
> data = [(0, (1, 2, 3), ((10, 20, 30),(10, 20, 30),(10, 20, 30),(10,
> 20, 30))),
>         (1, (3, 4, 5), ((30, 40, 50),(30, 40, 50),(30, 40, 50),(30,
> 40, 50))),
>         (2, (5, 6, 7), ((50, 60, 70),(50, 60, 70),(50, 60, 70),(50,
> 60, 70))),
>         (3, (7, 8, 9), ((70, 80, 90),(70, 80, 90),(70, 80, 90),(70,
> 80, 90)))]
> arraydata = np.array(data, dtype=dt)
>
> np.savetxt('testa.txt', arraydata)
>
> Traceback (most recent call last):
>   File ".../dtype.py", line 118, in <module>
>     np.savetxt('testa.txt', arraydata)
>   File "/usr/lib/pymodules/python2.7/numpy/lib/npyio.py", line 886,
> in savetxt
>     fh.write(asbytes(format % tuple(row) + newline))
> TypeError: float argument required, not numpy.void
>
>
> Qualcuno saprebbe darmi qualche indicazione?

Quello che capisco io è che numpy.void è il tipo degli oggetti che hai 
messo in arraydata

     In [14]: type(arraydata[0])
     Out[14]: <type 'numpy.void'>

L'help di savetxt dice?

     ...
     Definition:     numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', 
newline='\n')
     Docstring:
     Save an array to a text file.

     Parameters
     ----------
     ...
     fmt : str or sequence of strs
         A single format (%10.5f), a sequence of formats, or a
         multi-format string, e.g. 'Iteration %d -- %10.5f', in which
         case `delimiter` is ignored.

Il tuo errore dice

     >     fh.write(asbytes(format % tuple(row) + newline))
     > TypeError: float argument required, not numpy.void

ne capisco che format è un segnaposto che vuole un float, tipo %f, e 
questi void gli stanno indigesti.

Infatti usando:

     In [20]: np.savetxt('testa.txt', arraydata, fmt="%s")

un file viene salvato (non so se contiene quello che ti aspettavi).

Altro non so: non ho mai usato numpy con tipi che non fossero quelli di 
base.


-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python