Joe*_*ton 156

好吧,如果您以列表形式阅读数据,只需np.array(map(float, list_of_strings))(或等效地使用列表推导).(在Python 3,你需要调用listmap,如果你使用的返回值map,因为map现在返回一个迭代器).

但是,如果它已经是一个numpy字符串数组,那么有一种更好的方法.使用astype().

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

  • @MrMartin - 然后使用`list`.Numpy阵列是故意均匀打字的.如果你真的想要,你可以使用一个对象数组(例如`np.array(['apple',1.2,1,{'b'= None,'c'= object()}],dtype = object)`) .但是,对象数组与使用列表相比没有任何明显的优势. (7认同)

Her*_*eer 7

另一种选择可能是numpy.asarray

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

对于 Python 2*:

print a, type(a), type(a[0])
print b, type(b), type(b[0])
Run Code Online (Sandbox Code Playgroud)

导致:

['1.1', '2.2', '3.2'] <type 'list'> <type 'str'>
[1.1 2.2 3.2] <type 'numpy.ndarray'> <type 'numpy.float64'>
Run Code Online (Sandbox Code Playgroud)

  • 此处不需要“order='C'”,因为这是一个一维数组。这也有效(至少在Python 3.6.9中):b=np.array(a, dtype=float) (3认同)
  • 我在 python 2.7 中对所有答案进行了基准测试。假设给我一个代表浮点数的 512 个字符串的列表,这种方法是最快的(比 pradeep bisht 的答案稍快,比 Thomio 的答案快约 1.5 倍,比接受的答案快两倍多)。点个赞吧! (2认同)

小智 6

您可以np.array()使用dtype = float

import numpy as np

x = ["1.1", "2.2", "3.2"]
y = np.array(x,dtype=float)
Run Code Online (Sandbox Code Playgroud)

输出:

array([1.1, 2.2, 3.2])
Run Code Online (Sandbox Code Playgroud)


小智 5

你也可以使用这个

import numpy as np
x=np.array(['1.1', '2.2', '3.3'])
x=np.asfarray(x,float)
Run Code Online (Sandbox Code Playgroud)


Tho*_*mio 5

如果您有(或创建)单个字符串,则可以使用np.fromstring

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

注意,x = ','.join(x)将 x 数组转换为 string '1.1, 2.2, 3.2'。如果您从 txt 文件中读取一行,则每一行都将是一个字符串。