2012-02-25 13 views
12

मैंप्रिंट हेक्साडेसिमल संख्याओं के रूप में एक पूर्णांक सरणी

array1 = np.array([[25, 160, 154, 233], 
        [61, 244, 198, 248], 
        [227, 226, 141, 72 ], 
        [190, 43, 42, 8]],np.int) ; 

का उपयोग कर जो

रूप
[[25, 160, 154, 233] 
[61, 244, 198, 248] 
[227, 226, 141, 72] 
[190, 43, 42 , 8]] 

कैसे मैं इस तरह इस सरणी हेक्साडेसिमल संख्याओं के रूप में प्रदर्शित करते हैं प्रदर्शित करता है के द्वारा बनाई गई एक सरणी है:

[[0x04, 0xe0, 0x48, 0x28] 
[0x66, 0xcb, 0xf8, 0x06] 
[0x81, 0x19, 0xd3, 0x26] 
[0xe5, 0x9a, 0x7a, 0x4c]] 

नोट: हेक्स में संख्या int में संख्याओं के वास्तविक रूपांतरण नहीं हो सकती है। मैंने हेक्स सरणी भर दी है जो मुझे चाहिए जो कि मुझे चाहिए।

+1

आप numpy का किस संस्करण का उपयोग कर रहे हैं ('np.version.version')? –

उत्तर

10

पायथन में एक पूर्ण हेक्स फ़ंक्शन है जो पूर्णांक को उनके हेक्स प्रस्तुति (एक स्ट्रिंग) में परिवर्तित करने के लिए है। आप multidimensional सरणी के तत्वों पर लागू करने के लिए numpy.vectorize का उपयोग कर सकते हैं।

>>> import numpy as np 
>>> A = np.array([[1,2],[3,4]]) 
>>> vhex = np.vectorize(hex) 
>>> vhex(A) 
array([['0x1', '0x2'], 
     ['0x3', '0x4']], 
     dtype='<U8') 

गति के साथ ऐसा करने का एक अंतर्निहित तरीका हो सकता है जो गति एक मुद्दा है तो बेहतर विकल्प होगा।

+0

-0, 'numpy.set_printoptions' के अस्तित्व के कारण। –

+1

वेक्टरिज़ आसान है जब केवल कभी-कभी हेक्स स्ट्रिंग की आवश्यकता होती है। अन्यथा 'numpy.set_printoptions' के अस्तित्व के कारण मूल = get_printoptions(), set_printoptions (हेक्स), प्रिंट हेक्स, set_printoptions (मूल) –

2

यह एक लाइनर काम करना चाहिए:

print '[' + '],\n['.join(','.join(hex(n) for n in ar) for ar in array1) + ']' 
+1

-0 की आवश्यकता होगी। –

+0

हां, यह निश्चित रूप से एक बेहतर समाधान है। प्रश्न पूछने वाले, कृपया जस्टिन छील का जवाब देखें, और मेरा उपयोग न करें। –

+0

नम्पी बिल्कुल बेहतर समाधान है! यदि आपके पास numpy तक पहुंच है। ओपी के लिए –

1

यह numpy.set_printoptions साथ व्यवहार आप चाहते हैं पाने के लिए, formatter कीवर्ड आर्ग का उपयोग कर संभव हो जाना चाहिए। यह एक प्रकार के विनिर्देश के साथ एक शब्दकोश लेता है (यानी 'int') कुंजी के रूप में और मुद्रित करने के लिए स्ट्रिंग को लौटने योग्य कॉल करने योग्य ऑब्जेक्ट। मैं कोड डालना चाहता हूं लेकिन numpy के मेरे पुराने संस्करण में अभी तक कार्यक्षमता नहीं है। (ओह।)

1

यदि आप इसके लिए देख रहे हैं प्रदर्शन के लिए सिर्फ है आप कुछ इस तरह कर सकते हैं:

>>> a = [6, 234, 8, 9, 10, 1234, 555, 98] 
>>> print '\n'.join([hex(i) for i in a]) 
0x6 
0xea 
0x8 
0x9 
0xa 
0x4d2 
0x22b 
0x62 
20

आप प्रिंट विकल्प numpy यह करने के लिए के लिए सेट कर सकते हैं।

import numpy as np 
np.set_printoptions(formatter={'int':hex}) 
np.array([1,2,3,4,5]) 

देता

array([0x1L, 0x2L, 0x3L, 0x4L, 0x5L]) 

एल अंत में सिर्फ इसलिए कि मैं एक 64-बिट प्लेटफॉर्म पर हूँ और यह फ़ॉर्मेटर चाहता भेज रहा है है। इसे ठीक करने के आप उपयोग कर सकते

np.set_printoptions(formatter={'int':lambda x:hex(int(x))}) 
+1

एफवाईआई। 'Set_printoptions' के लिए 'formatter' पैरामीटर 2 में दिखाई देता है।0 दस्तावेज़, लेकिन 1.6 में नहीं। तो मुझे कल्पना है कि यह एक नई सुविधा है। यदि आपके पास पुराना संस्करण है, तो आप अपना खुद का स्वरूपण फ़ंक्शन रोल कर सकते हैं और इसे 'numpy.set_string_function' के साथ numpy पर आपूर्ति कर सकते हैं। आपके द्वारा प्रदान किए जाने वाले फ़ंक्शन को जस्टिन के उत्तर में एक आइटम की बजाय * संपूर्ण सरणी * प्रारूपित करने की आवश्यकता होगी। –

3

बस मेरे दो सेंट में फेंकने यह हमेशा कि

a = [[1,2],[3,4]] 
print [map(hex, l) for l in a] 

की तरह एक 2d सरणी जो आप [['0x1', '0x2'], ['0x3', '0x4']]

-1
देता है अगर आप इस सूची समझ सुंदर बस का उपयोग कर कर सकता है
array1_hex = np.array([[hex(int(x)) for x in y] for y in array1]) 
print array1_hex 
# => array([['0x19', '0xa0', '0x9a', '0xe9'], 
#   ['0x3d', '0xf4', '0xc6', '0xf8'], 
#   ['0xe3', '0xe2', '0x8d', '0x48'], 
#   ['0xbe', '0x2b', '0x2a', '0x8']], 
#   dtype='|S4') 
+0

यह उत्तर त्रुटि के साथ विफल रहता है: TypeError: 'int' ऑब्जेक्ट पुन: प्रयोज्य नहीं है – tarabyte

संबंधित मुद्दे