Tôi nhận thấy một hành vi không nhất quán trong numpy.dot
khi có nan
s và số không.Lỗi Numpy.dot? Hành vi NaN không nhất quán
Có ai có thể hiểu được không? Đây có phải là một lỗi? Điều này có dành riêng cho hàm dot
không?
Tôi đang sử dụng phiên bản v1.6.1, 64bit, chạy trên Linux (cũng được thử nghiệm trên v1.6.2). Tôi cũng đã thử nghiệm trên v1.8.0 trên windows 32bit (vì vậy tôi không thể biết được sự khác biệt là do phiên bản hoặc hệ điều hành hay vòm).
from numpy import *
0*nan, nan*0
=> (nan, nan) # makes sense
#1
a = array([[0]])
b = array([[nan]])
dot(a, b)
=> array([[ nan]]) # OK
#2 -- adding a value to b. the first value in the result is
# not expected to be affected.
a = array([[0]])
b = array([[nan, 1]])
dot(a, b)
=> array([[ 0., 0.]]) # EXPECTED : array([[ nan, 0.]])
# (also happens in 1.6.2 and 1.8.0)
# Also, as @Bill noted, a*b works as expected, but not dot(a,b)
#3 -- changing a from 0 to 1, the first value in the result is
# not expected to be affected.
a = array([[1]])
b = array([[nan, 1]])
dot(a, b)
=> array([[ nan, 1.]]) # OK
#4 -- changing shape of a, changes nan in result
a = array([[0],[0]])
b = array([[ nan, 1.]])
dot(a, b)
=> array([[ 0., 0.], [ 0., 0.]]) # EXPECTED : array([[ nan, 0.], [ nan, 0.]])
# (works as expected in 1.6.2 and 1.8.0)
Case # 4 dường như được làm việc một cách chính xác trong v1.6.2 và v1.8.0, nhưng không phân # 2 ...
EDIT: @seberg chỉ ra đây là một vấn đề blas , vì vậy đây là các thông tin về quá trình cài đặt blas tôi tìm thấy bằng cách chạy from numpy.distutils.system_info import get_info; get_info('blas_opt')
:
1.6.1 linux 64bit
/usr/lib/python2.7/dist-packages/numpy/distutils/system_info.py:1423: UserWarning:
Atlas (http://math-atlas.sourceforge.net/) libraries not found.
Directories to search for the libraries can be specified in the
numpy/distutils/site.cfg file (section [atlas]) or by setting
the ATLAS environment variable.
warnings.warn(AtlasNotFoundError.__doc__)
{'libraries': ['blas'], 'library_dirs': ['/usr/lib'], 'language': 'f77', 'define_macros': [('NO_ATLAS_INFO', 1)]}
1.8.0 windows 32bit (anaconda)
c:\Anaconda\Lib\site-packages\numpy\distutils\system_info.py:1534: UserWarning:
Blas (http://www.netlib.org/blas/) sources not found.
Directories to search for the sources can be specified in the
numpy/distutils/site.cfg file (section [blas_src]) or by setting
the BLAS_SRC environment variable.
warnings.warn(BlasSrcNotFoundError.__doc__)
{}
(cá nhân tôi không biết phải làm gì với nó)
Thật thú vị đối với trường hợp 2, 'a * b' cho kết quả mong muốn nhưng không phải là' np.dot (a, b) '. – wflynny
Kết quả của dấu chấm phụ thuộc vào thư viện blas bạn đang sử dụng. Ví dụ, tôi nhìn thấy cùng với openblas (nhưng không phải với tập bản đồ), do đó, hoặc điều này là không xác định, hoặc một lỗi trong thư viện blas. Phép nhân không liên quan thực sự ... – seberg
Hmm, hãy thử 'từ numpy.distutils.system_info nhập get_info; get_info ('blas_opt') ' – seberg