Эффективный способ выполнения сравнений и арифметики в списке с нерегулярными измерениями, Python - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь найти эффективный способ преобразования массива следующим образом:

Каждый элемент будет преобразован в None, вещественное число или кортеж / список / массив размером 2 (содержащие действительные числа).

Функция преобразования, которую я использую, проста и выполняет только сравнения чисел. Поэтому моя первая мысль - использовать np.where для быстрых сравнений. Теперь, если преобразование None или действительное число, у меня нет проблем.

Но, когда преобразование является кортежом / списком / массивом, np.where дает мне ошибки. Это часто происходит, потому что массивы numpy требуют регулярности измерений. Так что теперь я вынужден работать со списками ...

Так что моя идея теперь состоит в том, чтобы вместо преобразования элемента в кортеж / список / массив размером 2 я преобразовал его в комплексное число. Но тогда у меня есть массив комплексных чисел, содержащий в основном числа с 0 мнимой частью (так как большинство преобразований будут None или действительными числами). Я не могу себе этого позволить, говоря по памяти. (Или?)

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

Я вынужден работать со списками в этом сценарии, или вы делаете что-то еще?

EDIT: Меня просят привести некоторые примеры моей трансформации:

Входные данные: массив, содержащий элементы со значениями Нет или действительные числа от [0,360)

Преобразование: (упрощенно):

Ни один не переходит в Ни один

Элемент

в [0,45) переходит к 2 действительным числам (слева, справа), скажем, к 2 случайным действительным числам от 0 до элемента.

элемент в [45,360) переходит в 1 вещественное число

что я делаю, например:

arrayTransformed = np.where((array>=0) & (array<45), transform(array), array)
#this gives problems ofc
arrayTransformed = np.where((array>=45) & (array<=360), transform(array), arrayTransformed ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...