Numpy: эффективный способ создания сложного массива из двух реальных массивов - PullRequest
1 голос
/ 22 апреля 2020

У меня есть два реальных массива (a и b), и я хотел бы создать сложный массив (c), который принимает два реальных массива в качестве его реальной и мнимой частей соответственно.

Самый простой из них будет

c = a + b * 1.0j

Однако, поскольку мой размер данных довольно велик, такой код не очень эффективен.

Мы также можем сделать следующее,

c = np.empty(data_shape)
c.real = a
c.imag = b

Мне интересно, есть ли лучший способ сделать это (например, используя buffer или что-то еще)?

Большое спасибо!

1 Ответ

1 голос
/ 22 апреля 2020

Поскольку действительная и мнимая части каждого элемента должны быть смежными, вам придется выделить другой буфер для чередования данных, несмотря ни на что. Таким образом, второй метод, показанный в вопросе, настолько эффективен, насколько это возможно. Один из вариантов будет

np.stack((a, b), axis=-1).view(np.complex).squeeze(-1)

. Это работает для любой формы массива, а не только для 1D. Он обеспечивает правильное чередование, укладывая его вдоль последнего измерения в порядке C.

Это предполагает, что ваш тип данных np.float. Если это не так, либо сделайте ставку на повышение (например, a = a.astype(float)), либо, возможно, замените np.complex на что-то другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...