Поскольку действительная и мнимая части каждого элемента должны быть смежными, вам придется выделить другой буфер для чередования данных, несмотря ни на что. Таким образом, второй метод, показанный в вопросе, настолько эффективен, насколько это возможно. Один из вариантов будет
np.stack((a, b), axis=-1).view(np.complex).squeeze(-1)
. Это работает для любой формы массива, а не только для 1D. Он обеспечивает правильное чередование, укладывая его вдоль последнего измерения в порядке C.
Это предполагает, что ваш тип данных np.float
. Если это не так, либо сделайте ставку на повышение (например, a = a.astype(float)
), либо, возможно, замените np.complex
на что-то другое.