文字列の配列をnumpyのfloatの配列に変換するにはどうすればよいですか?


116

変換方法

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

[1.1, 2.2, 3.2]

NumPyで?

回答:


179

まあ、もしあなたがリストとしてデータを読んでいるのなら、そうしてくださいnp.array(map(float, list_of_strings))(あるいは同等に、リスト内包表記を使ってください)。(Python 3では、イテレータを返すので、を使用する場合listmap戻り値を呼び出す必要があります。)mapmap

ただし、それが文字列の乱雑な配列である場合は、より良い方法があります。を使用し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
@MrMartin-次にlist。Numpy配列は意図的に同種に型付けされています。本当に必要な場合は、オブジェクト配列(たとえばnp.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object))を使用できます。ただし、オブジェクト配列には、リストを使用するよりも大きな利点はありません。
Joe Kington、2015年


3

別のオプションはnumpy.asarrayかもしれません:

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

Python 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
ここですべての答えをpython 2.7でベンチマークしました。浮動小数点数を表す512文字列のリストが与えられたとすると、このアプローチは最速でした(プラディープビシュの回答よりわずかに速く、トミオの回答より約1.5倍速く、受け入れられた回答の2倍以上の速さ)。賛成投票してください!
jodag 2018

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配列をstringに変換します'1.1, 2.2, 3.2'。txtファイルから行を読み取る場合、各行はすでに文字列になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.