Конкатенация массивов записей с одинаковыми полями в разном порядке
У меня есть два ndarrays с "совместимым", но не идентичным dtypes, как это:
In [22]: A = numpy.empty(shape=(5), dtype=[("A", "f4"), ("B", "f4")])
In [23]: B = numpy.empty(shape=(5), dtype=[("B", "f4"), ("A", "f4")])
In [24]: numpy.concatenate((A, B))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-c930307fb7e4> in <module>()
----> 1 numpy.concatenate((A, B))
TypeError: invalid type promotion
Если не считать явной конкатенации поле за полем, есть ли способ объединить два?
Как я попал в эту ситуацию? Я не уверен, возможно, ошибка ранее в моем коде, но независимо от того, исправляю ли я более раннюю ошибку, мне любопытен ответ.
1 ответ
Решение
Не тупой эксперт, но это может работать, как вы хотите.
import numpy.lib.recfunctions
In [35]: numpy.lib.recfunctions.stack_arrays([A,B], usemask = False)
Out[35]:
array([(0.0, 0.0), (-3.935500814122861e-10, 4.579443381413502e-41),
(-4.456803814889554e-10, 4.579443381413502e-41),
(-8.571845455662697e-09, 4.579443381413502e-41),
(6.726232628759122e-44, 0.0), (0.0, 0.0),
(4.579443381413502e-41, -3.935500814122861e-10),
(4.579443381413502e-41, -4.456803814889554e-10),
(4.579443381413502e-41, -8.571845455662697e-09),
(0.0, 6.726232628759122e-44)],
dtype=[('A', '<f4'), ('B', '<f4')])