我有多个没有列名或行名的数组,我想使用numpy.vstack()
或numpy.hstack()
之类的方法将它们组合在一起。
可以分配列标签和行标签when creating a structured array,但hstack和vstack似乎没有此功能。
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'
有什么建议吗?
答案 0 :(得分: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)])
答案 1 :(得分:2)
您也可以考虑查看pandas。 Pandas有一个很好的data frame数据结构可能很好。
当然,这需要您为项目添加另一个依赖项。幸运的是,如果你已经使用numpy,那么Pandas很容易上手。
答案 2 :(得分:1)
vstack
不适用于结构化数组,但仅适用于内存中连续的“标准”numpy数组。最简单的方法是创建一个空的结构化数组,然后用你想要的行填充它:
import numpy as np
a3 = np.empty(4, dtype=[('RowName1','double'),('RowName2','double')])
a3['RowName1'] = a1
a3['RowName2'] = a2