2011-11-21 17 views
11

मैं क्या एक नाव वास्तव में 32 या 64bits (और एक numpy नाव सरणी के बिट्स की संख्या) है जाँच करना चाहते हैं। एक अंतर्निहित होना चाहिए, लेकिन अभी पता नहीं चला ...पायथन में एक फ्लोट के आकार की जांच कैसे करें?

उत्तर

16

पायथन float का आकार sys.float_info के माध्यम से अनुरोध किया जा सकता है। हालांकि, मैंने कई अलग-अलग आर्किटेक्चर पर 64 बिट से कुछ भी नहीं सामना किया।

NumPy सरणी के आइटम अलग-अलग आकार हो सकते हैं, लेकिन आप a.itemsize द्वारा बाइट्स में अपना आकार देख सकते हैं, जहां a एक NumPy सरणी है।

+9

sys.float_info कई दिलचस्प गुण होता है लेकिन एक नाव के आकार –

+0

@ उनमें से एक पांडा -34 यह निर्भर करता है वास्तव में क्या आप से इसका मतलब यह नहीं है "आकार"। किसी भी मामले में, यह सबसे अच्छी जानकारी है जिसे आप प्राप्त कर सकते हैं। (आप 'sys.float_info' में जानकारी से बिट्स में आसानी से पुनर्प्राप्त कर सकते हैं, लेकिन मुझे आश्चर्य है कि यह कभी भी उपयोगी कैसे होगा।) –

+4

ओपी ने बिट्स, 32 या 64 में आकार के बारे में स्पष्ट रूप से पूछा और आप आकार को पुनर्प्राप्त नहीं कर सकते float_info जब तक आप कुछ जंगली क्या करना चाहते से बिट्स प्रतिपादक रेंज और अपूर्णांश लंबाई –

4

फ़्लोटिंग पॉइंट मानों की सीमा sys.float_info ऑब्जेक्ट में उपलब्ध है।

जैसा कि स्वेन कहते हैं, सीपीथॉन float हमेशा 64-बिट है। लेकिन Python's language reference कहते

आप स्वीकृत सीमा के लिए अंतर्निहित मशीन वास्तुकला की दया (और सी या जावा कार्यान्वयन) कर रहे हैं ... "।

तो यह जरूरी दूसरे के लिए मामला नहीं है अजगर कार्यान्वयन

+0

चूंकि ओपी न्यूमपी का उपयोग कर रहा है, संभावना है कि वह अन्य पायथन कार्यान्वयन के बारे में ज्यादा परवाह नहीं करता है। अच्छा बिंदु, यद्यपि। :) –

6

numpy.finfo सूचियों आकार और float32 ... की अन्य विशेषताओं, सहित
nexp:।। इसके संकेत और पूर्वाग्रह सहित प्रतिपादक में बिट्स की संख्या
nmant: संख्या मंथिसा में बिट्स का।
एक मशीन पर IEEE-754 मानक चल बिन्दु के साथ,

import numpy as np 
for f in (np.float32, np.float64, float): 
    finfo = np.finfo(f) 
    print finfo.dtype, finfo.nexp, finfo.nmant 

प्रिंट होगा उदा

float32 8 23 
float64 11 52 
float64 11 52 

(float16 और float128 भी कोशिश करें।)

+0

प्लस एक बिट – denfromufa

+0

फ्लोट 16 \t आधा परिशुद्धता फ्लोट: साइन बिट, 5 बिट्स एक्सपोनेंट, 10 बिट्स मंटिसा; फ्लोट 32 \t एकल परिशुद्धता फ्लोट: साइन बिट, 8 बिट्स एक्सपोनेंट, 23 बिट्स मंटिसा; फ्लोट 64 \t डबल परिशुद्धता फ्लोट: साइन बिट, 11 बिट एक्सपोनेंट, 52 बिट्स मंथिसा – denfromufa

3
print numpy.finfo(numpy.float) 
Machine parameters for float64 
--------------------------------------------------------------------- 
precision= 15 resolution= 1.0000000000000001e-15 
machep= -52 eps=  2.2204460492503131e-16 
negep = -53 epsneg=  1.1102230246251565e-16 
minexp= -1022 tiny=  2.2250738585072014e-308 
maxexp= 1024 max=  1.7976931348623157e+308 
nexp = 11 min=  -max 
--------------------------------------------------------------------- 
संबंधित मुद्दे