कैसे सुन्न में झांकियों की एक सरणी के लिए स्ट्रिंग की एक सरणी कन्वर्ट करने के लिए?


116

कैसे कन्वर्ट करने के लिए

["1.1", "2.2", "3.2"]

सेवा

[1.1, 2.2, 3.2]

NumPy में?

जवाबों:


179

ठीक है, यदि आप डेटा को एक सूची के रूप में पढ़ रहे हैं, तो बस np.array(map(float, list_of_strings))(या समकक्ष रूप से, सूची समझ का उपयोग करें)। (पायथन 3 में, यदि आप इसका उपयोग करते हैं , तो आपको रिटर्न वैल्यू listपर कॉल mapकरना होगा map, क्योंकि mapअब एक पुनरावृत्त रिटर्न देता है।)

हालाँकि, अगर यह पहले से ही एक सुस्वाद सरणी है, तो एक बेहतर तरीका है। का उपयोग करें astype()

import numpy as np
x = np.array(['1.1', '2.2', '3.3'])
y = x.astype(np.float)

और अगर आपके पास एक स्ट्रिंग के साथ एक सरणी है जिसे मैं बनाए रखना चाहता हूं? जैसे ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal

8
@MMartin - फिर a का उपयोग करें list। Numpy सरणियों को जानबूझकर समरूप रूप से टाइप किया जाता है। यदि आप वास्तव में चाहते हैं, तो आप एक ऑब्जेक्ट ऐरे (जैसे np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)) का उपयोग कर सकते हैं । हालाँकि, किसी सूची का उपयोग करने पर ऑब्जेक्ट सरणियों का कोई महत्वपूर्ण लाभ नहीं है।
जो किंग्सटन


3

एक और विकल्प numpy.asarray हो सकता है :

import numpy as np
a = ["1.1", "2.2", "3.2"]
b = np.asarray(a, dtype=np.float64, order='C')

अजगर 2 * के लिए:

print a, type(a), type(a[0])
print b, type(b), type(b[0])

जिसके परिणामस्वरूप:

['1.1', '2.2', '3.2'] <type 'list'> <type 'str'>
[1.1 2.2 3.2] <type 'numpy.ndarray'> <type 'numpy.float64'>

1
मैंने अजगर 2.7 में यहाँ सभी उत्तरों को बेंच दिया। यह मानते हुए कि मुझे 512 स्ट्रिंग्स की एक सूची दी गई है जो फ्लोटिंग पॉइंट नंबरों का प्रतिनिधित्व करते हैं, यह दृष्टिकोण सबसे तेज़ था (जो कि प्रदीप बिश्ट के उत्तर की तुलना में थोड़ा तेज था, थॉमियो के उत्तर की तुलना में लगभग 1.5 गुना अधिक, और स्वीकृत उत्तर की तुलना में दोगुना से अधिक)। एक उत्थान है!
jodag

2

यदि आपके पास एक स्ट्रिंग है (या बनाएं), तो आप np.fromstring का उपयोग कर सकते हैं :

import numpy as np
x = ["1.1", "2.2", "3.2"]
x = ','.join(x)
x = np.fromstring( x, dtype=np.float, sep=',' )

ध्यान दें, x = ','.join(x)x सरणी को स्ट्रिंग में बदल देता है '1.1, 2.2, 3.2'। यदि आप txt फ़ाइल से एक पंक्ति पढ़ते हैं, तो प्रत्येक पंक्ति पहले से ही एक स्ट्रिंग होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.