2012-03-22 7 views
8

मैं एक 2-आयामी numpy सरणी है कि इस तरह दिखता है:बिना किसी अतिरिक्त नोटेशन (वर्ग ब्रैकेट [] और तत्वों के बीच रिक्त स्थान) के बिना बेवकूफ सरणी कैसे मुद्रित करें?

[[a b c] 
[d e f] 
[g h i]] 

मैं डिफ़ॉल्ट सांकेतिक फुलाना कि आम तौर पर सरणियों के साथ आता है के किसी भी बिना यह प्रिंट करना चाहते हैं; अर्थात् , ] और तत्वों के बीच की जगहें। कुछ इस तरह:

abc 
def 
ghi 

यह ऐसा करना संभव है (एक छोटी सी और संभवतः महंगा अजगर पाश के बिना, निश्चित रूप से)?

मैंने numpy.set_printoptions पर देखा है, लेकिन ऐसा लगता है कि यह केवल तत्वों को प्रदर्शित करने के लिए प्रस्तुतिकरण विकल्प सेट करता है, न कि वर्णों के बीच।

संपादित: सरणी में तत्वों एक स्ट्रिंग प्रतिनिधित्व कि कुछ भी हो सकता [, ] और रिक्त स्थान को भी शामिल है, की है। कैसे इस तरह के एक सरणी का निर्माण करने के कम से कम उदाहरण:

class custom(object): 
    def __repr__(self): 
     return 'a' 
a = numpy.empty((5, 5), custom) 
a.fill(custom()) 
print a 
+0

बस स्पष्ट होना: अपने कस्टम रेपर एक टर्मिनल '.' आप से छुटकारा पाने के लिए चाहते हैं कि शामिल है, लेकिन हो सकता है दूसरों को शामिल करें जो आप नहीं करते? मुझे यकीन नहीं है कि मैं समझता हूं कि आप क्या पट्टी करना चाहते हैं। – DSM

+0

मेरा बुरा, यह मेरे द्वारा हाथ से प्रतिनिधित्व संपादित करने के कारण था। मेरा मूल प्रश्न नियमित संख्याओं की एक संख्यात्मक सरणी का उपयोग करता है, जिसके लिए प्रत्येक नंबर के बाद ''' होता है जो डेलीमीटर के रूप में उपयोग किया जाता है (या दशमलव विभाजक के रूप में, सुनिश्चित नहीं है)। बाद में, मैंने यह प्रश्न दर्शाने के लिए संपादित किया कि सरणी का डेटा प्रकार आवश्यक संख्यात्मक नहीं था, और तदनुसार डिलीमीटर को बदलना भूल गया। फिर से संपादित –

+0

सब्सक्राइब: केवल '[] ': http://stackoverflow.com/questions/9360103/how-to-print-a-numpy-array-without-brackets/42046765#42046765 –

उत्तर

8

जबकि एक पाश को यह काफी मात्रा में, मुझे लगता है कि यह शायद सबसे अच्छा आप प्राप्त करने के लिए जा रहे हैं है। आम तौर पर join स्ट्रिंग विधि बहुत तेज़ है।

>>> a = np.array([[1,2,3],[2,4,6],[-1,-2,-3]]) 
>>> print '\n'.join(''.join(str(cell) for cell in row) for row in a) 
123 
246 
-1-2-3 

मुझे लगता है कि इस बिंदु पर आप शायद कुछ लागू करने और इसे मापने में कितना समय लगेगा। मेरा अनुमान है कि कोड का सबसे धीमा हिस्सा वास्तव में कंसोल पर प्रिंट करेगा, स्ट्रिंग्स को एकसाथ शामिल नहीं करेगा।

+0

अच्छा, मुझे लगता है कि इसका मतलब है कि ऐसा करने के लिए कोई "मूर्ख रास्ता" नहीं है। धन्यवाद वैसे भी –

0
>>> import numpy  
>>> a = numpy.array([[ 1.0, 2, 3], [ 4, 5, 6], [ 7, 8, 9]]) 
>>> print str(a).replace(' ','').replace('.','').replace('[','').replace(']','') 
123 
456 
789 
+0

+1 हटाएं क्योंकि यह प्रश्न का उत्तर देता है मैंने पूछा, लेकिन प्रश्न में असली सरणी एक कस्टम डेटा प्रकार का उपयोग करती है जिसके लिए स्ट्रिंग प्रस्तुति कुछ भी हो सकती है, जिसमें रिक्त स्थान और ब्रैकेट शामिल हैं। इस –

+0

@Etienne Perot - ड्राइंग बोर्ड पर वापस प्रतिबिंबित करने के लिए प्रश्न संपादित करें! – fraxel

3
np.savetxt(sys.stdout.buffer, a, fmt='%s', delimiter='') 
+0

क्या आपको वास्तव में 'sys.stdout.buffer' पर' .buffer' की आवश्यकता है? –

0

यह बहुत सरल है, अगर a अपने सरणी है सिर्फ यह कर दिया गया है:

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a)))) 
संबंधित मुद्दे