Как обрезать действительные и мнимые части элементов массива комплексных чисел python numpy - PullRequest
2 голосов
/ 11 февраля 2020

У меня есть numpy массив комплексных чисел. Я стараюсь обрезать действительные и мнимые части каждого числа в массиве до некоторого предписанного минимума и максимума (то же самое ограничение применяется как к действительной, так и к мнимой частям). Например, рассмотрим:

import numpy as np

clip_min = -4
clip_max = 3

x = np.array([-1.4 + 5j, -4.7 - 3j])

Желаемым результатом операции отсечения будет:

[-1.4 + 3j, -4-3j]

. Я могу добиться этого, вызвав np.clip для действительной и мнимой частей сложный массив и затем добавление их (после умножения мнимых отсеченных данных на 1j). Есть ли способ сделать это с помощью одной команды?

np.clip(x, clip_min, clip_max) 

не дает желаемого результата.

1 Ответ

2 голосов
/ 11 февраля 2020

Существует несколько более эффективный способ, чем урезание реальной и мнимой частей в отдельные массивы с использованием операций на месте:

np.clip(x.real, clip_min, clip_max, out=x.real)
np.clip(x.imag, clip_min, clip_max, out=x.imag)

Если это просто декартовы координаты, хранящиеся в комплексных числах, вы можете обрезать они в одной команде, сохраняя их как плавающие, а не сложные.

x = array([[-1.4,  5. ],
           [-4.7, -3. ]])
np.clip(x, clip_min, clip_max)
>>> array([[-1.4,  3. ],
           [-4. , -3. ]])
...