簡體   English   中英

將列和行標簽分配給合並的numpy數組?

[英]Assign column and row labels to merged numpy arrays?

我有多個沒有列名或行名的數組,我想使用numpy.vstack()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'


有什么建議么?

一些可能的選項是(因為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))

有了這個,但是要注意一些問題,因為內存的重新解釋如何與視圖一起工作,最好只使用級聯數組創建一個新的Recarray。

您可以扭轉邏輯:

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)])

您也可以考慮看熊貓 熊貓有一個不錯的數據框數據結構,可能很好。

當然,這需要您向項目中添加另一個依賴項。 幸運的是,如果您已經在使用numpy,那么Pandas就很容易上手。

vstack不適用於結構化數組,而僅適用於在內存中連續的“標准” numpy數組。 最簡單的方法是創建一個空的結構化數組,然后用所需的行填充它:

import numpy as np
a3 = np.empty(4, dtype=[('RowName1','double'),('RowName2','double')])
a3['RowName1'] = a1
a3['RowName2'] = a2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM