将numpy字符串数组转换为float:Bizarre?

2024-04-24 07:06:40 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,这个应该是一个非常简单的事情,但是不管出于什么原因,我没有做任何事情来将字符串数组转换为浮点数组。

我有一个两列数组,如下所示:

Name    Value
Bob     4.56
Sam     5.22
Amy     1.22

我试试这个:

for row in myarray[1:,]:
     row[1]=float(row[1])

而这个:

for row in myarray[1:,]:
    row[1]=row[1].astype(1)

而这个:

myarray[1:,1] = map(float, myarray[1:,1])

他们似乎都做了些什么,但当我仔细检查时:

type(myarray[9,1])

我明白了

<type> 'numpy.string_'>

Tags: 字符串nameinforvaluesamtype原因
2条回答

numpy数组中对象的类型是在初始化该数组时确定的。如果以后要更改,则必须强制转换数组,而不是该数组中的对象。

myNewArray = myArray.asType(float)

注意:上转换是可能的,对于下转换,您需要astype方法。 有关更多信息,请参见:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.array.htmlhttp://docs.scipy.org/doc/numpy/reference/generated/numpy.chararray.astype.html

除非是结构化的,否则Numpy数组必须有一个dtype。因为数组中有一些字符串,所以它们都必须是字符串。

如果您希望有一个复杂的dtype,可以这样做:

import numpy as np
a = np.array([('Bob','4.56'), ('Sam','5.22'),('Amy', '1.22')], dtype = [('name','S3'),('val',float)])

注意,a现在是一个1d structured array,其中每个元素都是类型为dtype的元组。

您可以使用字段名访问这些值:

In [21]: a = np.array([('Bob','4.56'), ('Sam','5.22'),('Amy', '1.22')],
    ...:         dtype = [('name','S3'),('val',float)])

In [22]: a
Out[22]: 
array([('Bob', 4.56), ('Sam', 5.22), ('Amy', 1.22)], 
      dtype=[('name', 'S3'), ('val', '<f8')])

In [23]: a['val']
Out[23]: array([ 4.56,  5.22,  1.22])

In [24]: a['name']
Out[24]: 
array(['Bob', 'Sam', 'Amy'], 
      dtype='|S3')

相关问题 更多 >