2012-02-20 15 views
21

मैं a = [1,2,3,4,5] को a_string = "1 2 3 4 5" में परिवर्तित करना चाहता हूं। वास्तविक numpy सरणी काफी बड़ा है (50000x200) तो मुझे लगता है कि for loops का उपयोग करना बहुत धीमा है।ब्रैकेट के बिना एक अम्पी सरणी कैसे मुद्रित करें?

+0

: यह जांचें http://stackoverflow.com/questions/5365520/numpy-converting-array-from-float-to-strings – George

+3

क्या आप वाकई उस बड़े सरणी के लिए स्ट्रिंग प्रस्तुति की आवश्यकता है? किस लिए? –

+0

बाद में मुझे फ़ाइल में यह और तीन अन्य सरणी लिखने की आवश्यकता है। सभी सरणी के अलग-अलग आकार होते हैं और मुझे उन्हें फ़ाइल में बदलना होता है, इसलिए मैं इसे 'लेखन रेखा' का उपयोग करके मैन्युअल रूप से करने की योजना बना रहा हूं। – Framester

उत्तर

32

आप स्ट्रिंग से join विधि का उपयोग कर सकते हैं:

>>> a = [1,2,3,4,5] 
>>> ' '.join(map(str, a)) 
"1 2 3 4 5" 
+0

क्षमा करें, इसे – tito

+0

धन्यवाद, मैंने पहले 'असफल' शामिल होने की कोशिश की। मेरे लिए गायब टुकड़ा 'मानचित्र' है। – Framester

+2

एक सरल संस्करण (आईएमएचओ) एक पुनरावर्तक के साथ होगा: '' '.join (str (n) n में n के लिए) ' – alexis

3

Numpy इस array_str और array_repr के लिए दो कार्य प्रदान करता है - या तो जिनमें से आपकी आवश्यकताओं को करना चाहिए। आप या तो इस्तेमाल कर सकते हैं के बाद से, यहाँ प्रत्येक का एक उदाहरण है:

>>> from numpy import arange, reshape, array_str 
>>> M = arange(10).reshape(2,5) 
>>> M 
array([[0, 1, 2, 3, 4], 
     [5, 6, 7, 8, 9]]) 
>>> array_str(M) 
'[[0 1 2 3 4]\n [5 6 7 8 9]]' 
>>> array_repr(M) 
'array([[0, 1, 2, 3, 4],\n  [5, 6, 7, 8, 9]])' 

इन दोनों कार्यों दोनों अत्यधिक अनुकूलित कर रहे हैं और, जैसे, एक समारोह आप अपने आप को लिख सकते हैं से अधिक पसंद किया जाना चाहिए। इस आकार के सरणी से निपटने पर, मुझे लगता है कि आप जो गति प्राप्त कर सकते हैं उसे आप चाहते हैं।

+1

बिल्ड-इन फ़ंक्शंस का उपयोग करना निश्चित रूप से लाभ का है, लेकिन यह अभी भी ब्रैकेट को छोड़ देता है। तो यह अन्य के लिए बेहतर तरीका, लेकिन समान, मामलों। +1 – Framester

+0

आपने कहा कि आपको स्ट्रिंग को फ़ाइल में सहेजने की आवश्यकता है। यदि आपके पास उस फ़ाइल से स्ट्रिंग को बाद में पुनर्प्राप्त करने की योजना है तो यह ब्रैकेट्स के लिए उपयोगी हो सकता है। इसके अलावा, उप-तारों और विभाजन() का संयोजन ब्रैकेट को हटा देगा। – mau5padd

3

आप एक numpy सरणी एक के बजाय सूची (जब से तुम एक "वास्तविक numpy सरणी" अपनी पोस्ट में उल्लेख) आप सरणी के स्ट्रिंग प्रतिनिधित्व पर re.sub इस्तेमाल कर सकते हैं के साथ शुरू है, तो:

print(re.sub('[\[\]]', '', np.array_str(a))) 

फिर, यह मान रहा है कि आपकी सरणी a किसी बिंदु पर एक numpy सरणी थी। यह matrices पर भी काम करने का लाभ है।

4

np.savetxt

import numpy as np 
import sys 

a = np.array([[0.0, 1.0, 2.0, 3.0]]) 
np.savetxt(sys.stdout, a) 

आउटपुट:

0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 

या यदि सरणी उलटा:

:

a = np.array([0.0, 1.0, 2.0, 3.0]) 
np.savetxt(sys.stdout, a, newline=" ") 

या आप वास्तव में एक स्ट्रिंग की जरूरत है

import StringIO 
s = StringIO.StringIO() 
np.savetxt(s, a) 
print s.getvalue() 

आप प्राप्त करने के लिए fmt साथ सटीक नियंत्रण कर सकते हैं:

np.savetxt(sys.stdout, a, fmt="%.3f") 

उत्पादन:

0.000 1.000 2.000 3.000 

या:

np.savetxt(sys.stdout, a, fmt="%i") 

उत्पादन:

0 1 2 3 

पायथन 2.7.12, numpy 1.11.1 पर परीक्षण किया गया।

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