0

我有多个没有列名或行名的数组,我想使用类似的东西来组合它们numpy.vstack()or numpy.hstack()

可以在创建结构化数组时分配列和行标签,但是hstackvstack似乎没有这个功能。

import numpy as np
a1 = np.array([1,2,3,4])
a2 = np.array([5,6,7,8])
a3 = np.vstack([a1,a2],dtype=[('RowName1','double'),('RowName2','double')])

产生:

TypeError: vstack() got an unexpected keyword argument 'dtype'


有什么建议么?

4

3 回答 3

2

一些可能的选择是(因为recfunctions非常隐藏):

from numpy.lib import recfunctions
a1 = np.array([1,2,3,4]).astype(('RowName1',float))
a2 = np.array([5,6,7,8]).astype(('RowName2',float))
recfunctions.merge_arrays((a1, a2))

有这个,但这有一些问题需要小心,因为内存的重新解释如何与视图一起工作,最好只使用连接数组创建一个新的重新数组。

你可以扭转逻辑:

import numpy    
a1 = np.array([1,2,3,4])
a2 = np.array([5,6,7,8])
# ok, not that beautiful. But if your arrays are the correct type to begin with
# you can skip that astype call. Using `np.c_[]` since it happens to concatenate right.
a3 = np.c_[v1,v2].astype(float).copy('C').view(dtype=[('RowName1',float),('RowName2',float)])
于 2012-12-12T10:36:47.833 回答
2

您也可以考虑查看pandas。Pandas 有一个不错的数据框数据结构,可能很好。

当然,这需要您在项目中添加另一个依赖项。幸运的是,如果你已经在使用 numpy,那么 Pandas 很容易上手。

于 2012-12-12T14:42:32.197 回答
1

vstack不适用于结构化数组,但仅适用于内存中连续的“标准”numpy 数组。最简单的方法是创建一个空的结构化数组,然后用所需的行填充它:

import numpy as np
a3 = np.empty(4, dtype=[('RowName1','double'),('RowName2','double')])
a3['RowName1'] = a1
a3['RowName2'] = a2
于 2012-12-12T10:21:04.293 回答