Комплексные числа - это просто пары чисел с плавающей запятой. Если у вас есть массив numpy формы (n1, n2, ..., nZ)
и введите complex128
, вы можете view
как массив формы (n1, n2, ..., 2 * nZ)
и набрать float64
:
>>> a = np.linspace(0.+1.j, 1.+0j, 12).reshape(3, 4)
>>> a.shape
(3, 4)
>>> a.dtype
dtype('complex128')
>>> b = a.view(np.float64)
>>> b.shape
(3, 8)
>>> b.dtype
np.float64
Реальная и мнимая части занимают все остальные элементы массива. Вы можете убедиться, что данные не изменяются при просмотре как совместимый dtype:
>>> (b[:, ::2] == a.real).all()
True
>>> (b[:, 1::2] == a.imag).all()
True
Операция очень дешевая: новый объект массива с разными шагами создается поверх тех же данных. Когда вы десериализуете, вы можете тривиально восстановить массив формы (n1, n2, ..., 2 * nZ)
и ввести float64
в одну из фигур (n1, n2, ..., nZ)
и набрать complex128
:
>>> a2 = b.view(np.complex128)
>>> a2.shape
(3, 4)
>>> a2.dtype
dtype('complex128')