কীভাবে স্ট্রিংগুলির একটি অ্যারেকে আঙ্কে ভাসমান অ্যারে রূপান্তর করবেন?


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)

এবং যদি আপনার কাছে কোনও স্ট্রিং থাকে যা আমি বজায় রাখতে চাই? ['এ', '১.১', '২.২', '৩.৩'] -> ['এ', ১.১,২.২,৩.৩]
ইপাসকোল

8
@ মিঃমার্টিন - তারপরে একটি ব্যবহার করুন list। নম্পি অ্যারেগুলি ইচ্ছাকৃতভাবে একজাতভাবে টাইপ করা হয়। আপনি যদি সত্যিই চান তবে আপনি একটি অবজেক্ট অ্যারে (উদাহরণস্বরূপ np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)) ব্যবহার করতে পারেন । তবে তালিকা ব্যবহারের ক্ষেত্রে অবজেক্ট অ্যারেগুলির কোনও উল্লেখযোগ্য সুবিধা নেই।
জো কিংটন 9'15


3

আর একটি বিকল্প নামপি.এসআররে হতে পারে :

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
আমি সমস্ত উত্তর এখানে পাইথন ২.7 এ বেঞ্চমার্ক করেছি। ধরে নিলাম আমাকে 512 স্ট্রিংয়ের একটি তালিকা দেওয়া হয়েছে যা ভাসমান পয়েন্ট সংখ্যা উপস্থাপন করে, এই পদ্ধতিরটি ছিল দ্রুততম (প্রদীপ বিশটের উত্তরের চেয়ে সামান্য দ্রুত, থোমিওর উত্তরের চেয়ে প্রায় 1.5 গুণ বেশি দ্রুত এবং স্বীকৃত উত্তরের চেয়ে দ্বিগুণেরও বেশি দ্রুত)। একটি upvote আছে!

2

আপনার যদি একটি একক স্ট্রিং থাকে (বা তৈরি করুন), আপনি এনপি.ফর্মস্ট্রিং ব্যবহার করতে পারেন :

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)এক্স অ্যারেটিকে স্ট্রিংয়ে রূপান্তরিত করে '1.1, 2.2, 3.2'। আপনি যদি txt ফাইল থেকে একটি লাইন পড়েন তবে প্রতিটি লাইন ইতিমধ্যে একটি স্ট্রিং হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.