Преобразовать второй столбец массива NumPy в воображаемый - PullRequest
2 голосов
/ 07 ноября 2019

Я хочу преобразовать второй столбец массива numpy в мнимый.

Неудачная попытка:

>>> Z = np.array([[1, 2], [3, 4], [5, 6]])
>>> print(Z)
[[1 2]
 [3 4]
 [5 6]]

>>> Z[:, 1] = (Z[:, 1]) * 1j
ComplexWarning: Casting complex values to real discards the imaginary part
>>> print(Z)
[[1 0]
 [3 0]
 [5 0]]

Ожидаемый результат:

[[1+2.j]
 [3+4.j]
 [5+6.j]]

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Вы можете сначала преобразовать его в complex:

>>> Z=np.array([[1, 2],[3, 4],[5, 6]])
>>> Z = Z.astype(complex)
>>> Z = Z[:,:1] + Z[:,1:]*1j
>>> Z
array([[1.+2.j],
       [3.+4.j],
       [5.+6.j]])
2 голосов
/ 07 ноября 2019

Прямо сейчас у вас есть массив целых чисел. Это будет трудно или невозможно преобразовать в любой сложный тип на месте. Самое простое решение -

Z = Z[:, 0] + Z[:, 1] * 1j

Это уменьшит исходное измерение. Вы можете сохранить его, используя ломтики, как @ SayandipDutta предлагает , или изменить его на нужный вам размер:

Z = (Z[:, 0] + Z[:, 1] * 1j).reshape(-1, 1)

Решение, более соответствующее тому, что вы пытались, было бы возможно, если бы у вас былоначалось с массива чисел типа

Z = np.array([[1., 2.], [3., 4.], [5., 6.]])

или

Z = np.array([[1, 2], [3, 4], [5, 6]], dtype=float)

Теперь вы можете просматривать данные как np.complex, основываясь на достаточно безопасном предположении, что массивы расположены в порядке C:

Z.view(dtype=np.complex)

Это сохранит форму оригинала. При желании вы можете уменьшить размерность с помощью

np.sqeeze(Z.view(dtype=np.complex))

или просто

Z.view(dtype=np.complex).reshape(-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...