2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
與上面類似,但使用 list 和 zip
z
array([(array([1]), array([0.1])),
(array([2, 3, 4]), array([0.2, 0.3, 0.4])),
(array([5, 6]), array([0.5, 0.6]))],
dtype=[('field_1', 'O'), ('field_2', 'O')])
x = np.concatenate(z['field_1'])
y = np.concatenate(z['field_2'])
dt = np.dtype([('f0', '<i4'), ('f1', 'f8')])
np.asarray(list(zip(x, y)), dtype=dt)
array([(1, 0.1), (2, 0.2), (3, 0.3), (4, 0.4), (5, 0.5), (6, 0.6)],
dtype=[('f0', '<i4'), ('f1', '<f8')])

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不確定這是“最好”的方式,但它可以滿足您的需求。我不知道這可以完全在內(nèi)存中完成而不需要副本,所以我將從一個(gè)空數(shù)組開始。
>>>import numpy as np
>>>original = np.array([(np.array([1], dtype=np.int32), np.array([0.1], dtype=np.float64)),
... (np.array([2], dtype=np.int32), np.array([0.2], dtype=np.float64)),
... (np.array([3], dtype=np.int32), np.array([0.3], dtype=np.float64)),
... (np.array([4], dtype=np.int32), np.array([0.4], dtype=np.float64)),
... (np.array([5], dtype=np.int32), np.array([0.5], dtype=np.float64)),
... (np.array([6], dtype=np.int32), np.array([0.6], dtype=np.float64))],
... dtype=[('field_1', '<i4'), ('field_2', '<f8')])
>>>copy = np.empty((6,1), dtype=[('field_1', '<i4'), ('field_2', '<f8')])
然后我們可以連接原始數(shù)組中的 2 個(gè)字段
>>>copy['field_1'][:,0] = np.concatenate([original['field_1']])
>>>copy['field_2'][:,0] = np.concatenate([original['field_2']])
>>>copy
array([[(1, 0.1)],
[(2, 0.2)],
[(3, 0.3)],
[(4, 0.4)],
[(5, 0.5)],
[(6, 0.6)]], dtype=[('field_1', '<i4'), ('field_2', '<f8')])
最后一步是展平副本
>>>copy.flatten()
array([(1, 0.1), (2, 0.2), (3, 0.3), (4, 0.4), (5, 0.5), (6, 0.6)],
dtype=[('field_1', '<i4'), ('field_2', '<f8')])
添加回答
舉報(bào)