नम्पी के पास कई अलग-अलग मूल प्रकार हैं, जिनमें से सभी listed here हैं।कुछ numpy डेटाैट्स JSON serializable क्यों हैं और दूसरों को नहीं?
मैं float32
करने के लिए अपने कार्यक्रम में एक मुद्दा नीचे ट्रैक करने के बाद नहीं रहा है JSON-serializable किया जा रहा है, तो मैं उपरोक्त सूची में से सभी डेटाटाइप्स परीक्षण शुरू कर दिया है:
>>> import numpy as np
>>> from json import dumps
>>> dumps(np.bool(True))
'true'
>>> dumps(np.bool_(True))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/json/__init__.py", line 230, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python3.4/json/encoder.py", line 192, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python3.4/json/encoder.py", line 250, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python3.4/json/encoder.py", line 173, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: True is not JSON serializable
>>> dumps(np.int(0))
'0'
>>> dumps(np.int_(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.intc(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.intp(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.int8(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.int16(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.int32(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.int64(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.uint8(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.uint16(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.uint32(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.uint64(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.float(0))
'0.0'
>>> dumps(np.float_(0))
'0.0'
>>> dumps(np.float16(0))
Traceback (most recent call last):
[...]
TypeError: 0.0 is not JSON serializable
>>> dumps(np.float32(0))
Traceback (most recent call last):
[...]
TypeError: 0.0 is not JSON serializable
>>> dumps(np.float64(0))
'0.0'
>>> dumps(np.complex(0))
Traceback (most recent call last):
[...]
TypeError: 0j is not JSON serializable
>>> dumps(np.complex_(0))
Traceback (most recent call last):
[...]
TypeError: 0j is not JSON serializable
>>> dumps(np.complex64(0))
Traceback (most recent call last):
[...]
TypeError: 0j is not JSON serializable
>>> dumps(np.complex128(0))
Traceback (most recent call last):
[...]
TypeError: 0j is not JSON serializable
तो, कोई complex
प्रकार serializable है , यह समझ आता है।
लेकिन bool
काम करता है और bool_
नहीं करता है। int
काम करता है, लेकिन इसके नाम पर int
के साथ कुछ भी नहीं है। float
, float_
और float64
सभी ठीक हैं, लेकिन float16
और float32
नहीं हैं।
ऐसा क्यों है? जाहिर है, वे सभी आसानी से एक स्ट्रिंग में परिवर्तित हो सकते हैं, स्टैकट्रैक भी repr()
दिखाता है जो उनके मूल्य को प्रदर्शित करने के लिए उपयोग किया जा रहा है। क्या यह अनजान हो सकता है? या इस व्यवहार के लिए कोई अच्छा कारण है?
क्या आप सीधे 'np.float32 (...)' ऑब्जेक्ट बना रहे हैं? या यह एक सरणी से निकाला गया है? 'Arr.tolist()' समकक्ष क्रमबद्ध करने का प्रयास किया है? – hpaulj
यदि आपको किसी सरणी के तत्व को क्रमबद्ध करने की आवश्यकता है, तो इसे एक पायथन स्केलर में बदलने के लिए '.item()' विधि का उपयोग करने पर विचार करें। – hpaulj
यह भी देखें https://stackoverflow.com/questions/27050108/convert-numpy-type-to-python 'numpy टाइप को पायथन' – hpaulj