[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