Qualcuno può spiegare perché l'importazione di cv e numpy cambierebbe il comportamento di struct.unpack di python? Ecco quello che osservo:OpenCV e Numpy interagiscono male
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from struct import pack, unpack
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
Questo è corretto
>>> import cv
libdc1394 error: Failed to initialize libdc1394
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
ancora ok, dopo aver importato cv
>>> import numpy
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
E OK dopo l'importazione cv e poi NumPy
Ora ricomincio python:
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from struct import pack, unpack
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
>>> import numpy
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
Fin qui tutto bene, ma ora importare cv dopo l'importazione NumPy:
>>> import cv
libdc1394 error: Failed to initialize libdc1394
>>> unpack("f",pack("I",31))[0]
0.0
Ho ripetuto questo un certo numero di volte, anche su più server, e va sempre allo stesso modo. Ho anche provato con struct.unpack e struct.pack, che non fa differenza.
Non riesco a capire come l'importazione di numpy e cv possa avere alcun impatto sull'output di struct.unpack (il pacchetto rimane lo stesso, btw).
La cosa "libdc1394" è, credo, un rosso-aringhe: ctypes error: libdc1394 error: Failed to initialize libdc1394
Tutte le idee?
tl; dr: importazione numpy e quindi opencv modifica il comportamento di struct.unpack.
AGGIORNAMENTO: la risposta di Paolo qui sotto mostra che questo è riproducibile. Il commento di Seborg suggerisce che è qualcosa a che fare con il modo in cui Python gestisce i subnormali, il che sembra plausibile. Ho esaminato Contexts ma questo non sembrava essere il problema, poiché il contesto era lo stesso dopo le importazioni come era stato prima di loro.
Questo non ti aiuterà, ma solo per motivi di leggibilità e di semplificazione del problema, 'unpack (" f ", pack (" I ", 31))' produce lo stesso risultato? –
@PauloAlmeida: buon punto. Ho appena provato - si, lo stesso risultato ... Modificherò la domanda per rendere più facile la lettura ... – Ben