2016-08-04 3 views
6

मैंने जटिल infinities के साथ मजेदार परिणाम देखा है।जटिल infinities - मजाकिया reslts - एक numpy बग?

In [1]: import numpy as np 

In [2]: np.isinf(1j * np.inf) 
Out[2]: True 

In [3]: np.isinf(1 * 1j * np.inf) 
Out[3]: True 

In [4]: np.isinf(1j * np.inf * 1) 
Out[4]: False 

यह nan संबंधित है। लेकिन अंतिम परिणाम विचित्र है।

क्या यह एक संख्यात्मक बग है? मुझे कुछ भी अलग करना चाहिए?

+0

'numpy.inf' एक नियमित रूप से नाव, नहीं एक है NumPy वस्तु। पाइथन के अंतर्निहित जटिल प्रकारों में केवल सावधान इंफ/नैन हैंडलिंग नहीं है। – user2357112

+1

इसके बारे में सोचने के लिए आओ, मुझे यकीन नहीं है कि जटिल संख्या गणना के लिए घटकवृत्ति inf/nan कितनी समझ में आता है। आप वास्तव में यह नहीं बता सकते कि 'arg (inf + inf * j)' क्या होना चाहिए, या परिणाम के संकेत क्या होना चाहिए यदि आप इसे '1 + 1j' से गुणा करने का प्रयास करते हैं। ऐसा लगता है कि किसी भी चीज़ के साथ जटिल infinities गुणा तेजी से NaNs उत्पादन होगा। – user2357112

उत्तर

5

यह एक NumPy बग नहीं है। numpy.inf एक नियमित रूप से अजगर नाव है, और अजीब परिणाम नियमित अजगर जटिल गुणा एल्गोरिथ्म, जो this है से आते हैं: inf-inf घटाव और 0*inf पैदा करने के लिए

Py_complex 
_Py_c_prod(Py_complex a, Py_complex b) 
{ 
    Py_complex r; 
    r.real = a.real*b.real - a.imag*b.imag; 
    r.imag = a.real*b.imag + a.imag*b.real; 
    return r; 
} 

आदानों अनंत वास्तविक या काल्पनिक भागों है, जटिल गुणा जाता है गुणा, परिणामस्वरूप nan घटकों के लिए अग्रणी। हम देख सकते हैं 1j * numpy.inf एक nan घटक और एक inf घटक है कि:

In [5]: 1j * numpy.inf 
Out[5]: (nan+infj) 

और 1 से परिणाम गुणा दो nan घटकों का उत्पादन:

In [4]: 1j * numpy.inf * 1 
Out[4]: (nan+nanj)