將不同的數據類型存儲在一個NumPy數組中?我有兩個不同的數組,一個是字符串,另一個是整數。我想將它們連接到一個數組中,其中每列都具有原始數據類型。我目前的解決方案(見下文)將整個數組轉換為dtype = string,這看起來非常低效。combined_array = np.concatenate((A, B), axis = 1)是否有可能多發dtypes的combined_array時候A.dtype = string和B.dtype = int?
2 回答

哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
一種方法可能是使用記錄數組。“列”不會像標準numpy數組的列,但對于大多數用例,這就足夠了:
>>> a = numpy.array(['a', 'b', 'c', 'd', 'e'])>>> b = numpy.arange(5)>>> records = numpy.rec.fromarrays((a, b), names=('keys', 'data'))>>> records rec.array([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)], dtype=[('keys', '|S1'), ('data', '<i8')])>>> records['keys']rec.array(['a', 'b', 'c', 'd', 'e'], dtype='|S1')>>> records['data']array([0, 1, 2, 3, 4])
請注意,您還可以通過指定數組的數據類型來執行與標準數組類似的操作。這被稱為“ 結構化陣列 ”:
>>> arr = numpy.array([('a', 0), ('b', 1)], dtype=([('keys', '|S1'), ('data', 'i8')]))>>> arr array([('a', 0), ('b', 1)], dtype=[('keys', '|S1'), ('data', '<i8')])
不同之處在于記錄數組還允許對各個數據字段進行屬性訪問。標準結構化數組沒有。
>>> records.keys chararray(['a', 'b', 'c', 'd', 'e'], dtype='|S1')>>> arr.keysTraceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: 'numpy.ndarray' object has no attribute 'keys'

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
一個簡單的解決方案:將數據轉換為對象'O'類型
z = np.zeros((2,2), dtype='U2')o = np.ones((2,1), dtype='O')np.hstack([o, z])
創建數組:
array([[1, '', ''], [1, '', '']], dtype=object)
添加回答
舉報
0/150
提交
取消