Bất cứ ai có thể giải thích lý do tại sao nhập cv và numpy sẽ thay đổi hành vi của struct.unpack python? Đây là những gì tôi quan sát:OpenCV và Numpy tương tác kém
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
này là đúng
>>> import cv
libdc1394 error: Failed to initialize libdc1394
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
Tuy ok, sau khi nhập cv
>>> import numpy
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
Và OK sau khi nhập cv và sau đó NumPy
Bây giờ tôi khởi động lại 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
Cho đến nay rất tốt, nhưng bây giờ tôi nhập cv SAU nhập khẩu NumPy:
>>> import cv
libdc1394 error: Failed to initialize libdc1394
>>> unpack("f",pack("I",31))[0]
0.0
tôi đã lặp đi lặp lại này một số lần, trong đó có trên nhiều máy chủ, và nó luôn luôn đi theo cùng một cách. Tôi cũng đã thử nó với struct.unpack và struct.pack, mà cũng làm cho không có sự khác biệt.
Tôi không thể hiểu cách nhập numpy và cv có thể có bất kỳ tác động nào ở đầu ra của struct.unpack (gói vẫn giữ nguyên, btw).
Các "libdc1394" Vấn đề là, tôi tin rằng, một đỏ cá trích: ctypes error: libdc1394 error: Failed to initialize libdc1394
Bất kỳ ý tưởng?
tl; dr: nhập numpy và sau đó opencv thay đổi hành vi của struct.unpack.
CẬP NHẬT: Câu trả lời của Paulo dưới đây cho thấy rằng điều này có thể lặp lại. Nhận xét của Seborg gợi ý rằng nó liên quan đến cách python xử lý các subnormals, điều này nghe có vẻ hợp lý. Tôi nhìn vào Contexts nhưng điều đó dường như không phải là vấn đề, vì bối cảnh là như nhau sau khi nhập khẩu như trước đó.
Điều này sẽ không giúp ích gì cho bạn, nhưng chỉ vì mục đích dễ đọc và đơn giản hóa vấn đề, 'giải nén ("f", gói ("I", 31)) 'có tạo ra cùng một kết quả không? –
@PauloAlmeida: Tốt. Chỉ cần thử nó - có, cùng một kết quả ... Tôi sẽ chỉnh sửa các câu hỏi để làm cho nó dễ dàng hơn để đọc ... – Ben