Python-Numpy数组中的字符串和整数

Python-Numpy数组中的字符串和整数,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我想创建一个包含3列的数组。第一个是字符串,其他两个整数用于计算。然后将通过append函数添加更多行(如下所示) 问题是所有列似乎都被编码为字符串,而不仅仅是第一列。如何获取数字的正确数据类型 a = np.array([["String",1,2]]) a = np.append(a, [["another string", 3, 4]],axis = 0) 要获得这样一个混合数据类型数据,我们可以在追加或堆叠之前使用对象作为数据类型- a = np.array([["String",1,

我想创建一个包含3列的数组。第一个是字符串,其他两个整数用于计算。然后将通过append函数添加更多行(如下所示)

问题是所有列似乎都被编码为字符串,而不仅仅是第一列。如何获取数字的正确数据类型

a = np.array([["String",1,2]])
a = np.append(a, [["another string", 3, 4]],axis = 0)

要获得这样一个混合数据类型数据,我们可以在追加或堆叠之前使用
对象
作为数据类型-

a = np.array([["String",1,2]], dtype=object)
b = [["another string", 3, 4]]
a = np.vstack((a,np.asarray(b,object)))
样本运行-

In [40]: a = np.array([["String",1,2]], dtype=object)

In [41]: b = [["another string", 3, 4]]

In [42]: np.vstack((a,np.asarray(b,object)))
Out[42]: 
array([['String', 1, 2],
       ['another string', 3, 4]], dtype=object)

要获得这样一个混合数据类型数据,我们可以在追加或堆叠之前使用
对象
作为数据类型-

a = np.array([["String",1,2]], dtype=object)
b = [["another string", 3, 4]]
a = np.vstack((a,np.asarray(b,object)))
样本运行-

In [40]: a = np.array([["String",1,2]], dtype=object)

In [41]: b = [["another string", 3, 4]]

In [42]: np.vstack((a,np.asarray(b,object)))
Out[42]: 
array([['String', 1, 2],
       ['another string', 3, 4]], dtype=object)

迭代收集值时,通常最好在列表中收集值,然后生成数组:

例如,使用您的数据制作列表:

In [371]: alist = [("String", 1, 2)]
In [372]: alist.append(("another string", 3, 4))
In [373]: alist
Out[373]: [('String', 1, 2), ('another string', 3, 4)]
出于许多目的,该列表非常有用,
alist[0]
,或者
[i[0]表示alist中的i]

要制作列表,一个选项是结构化数组。因为我将值收集为元组列表,所以我可以:

In [374]: np.array(alist, dtype='U20,int,int')
Out[374]: 
array([('String', 1, 2), ('another string', 3, 4)], 
      dtype=[('f0', '<U20'), ('f1', '<i4'), ('f2', '<i4')])
In [375]: _['f1']
Out[375]: array([1, 3])

通过这个,我们可以访问行和列。但请注意,对象数组(尤其是混合类型的对象数组)不会带来快速numpy计算的好处。

迭代收集值时,通常最好在列表中收集值,然后创建数组:

例如,使用您的数据制作列表:

In [371]: alist = [("String", 1, 2)]
In [372]: alist.append(("another string", 3, 4))
In [373]: alist
Out[373]: [('String', 1, 2), ('another string', 3, 4)]
出于许多目的,该列表非常有用,
alist[0]
,或者
[i[0]表示alist中的i]

要制作列表,一个选项是结构化数组。因为我将值收集为元组列表,所以我可以:

In [374]: np.array(alist, dtype='U20,int,int')
Out[374]: 
array([('String', 1, 2), ('another string', 3, 4)], 
      dtype=[('f0', '<U20'), ('f1', '<i4'), ('f2', '<i4')])
In [375]: _['f1']
Out[375]: array([1, 3])

通过这个,我们可以访问行和列。但是请注意,使用对象数组,尤其是混合类型的对象数组,无法获得快速numpy计算的好处。

numpy
数组被认为是同构的。您可以使用
object
dtype,但在这一点上,您也可以使用普通的Python列表。另一种选择是使用结构化数组,或者可能是
pandas
DataFrame。此外,如果您计划使用
.append
添加一组行,几乎肯定不应该使用
numpy
数组。只需使用Python列表,首先使用list,然后转换为np。array@Mr_U4913更好的是,坚持列表。
numpy
数组被认为是同质的。您可以使用
object
dtype,但在这一点上,您也可以使用普通的Python列表。另一种选择是使用结构化数组,或者可能是
pandas
DataFrame。此外,如果您计划使用
.append
添加一组行,几乎肯定不应该使用
numpy
数组。只需使用Python列表,首先使用list,然后转换为np。array@Mr_U4913更好的是,坚持清单。