Читаемость и эффективность, что лучше? Numpy, кортеж и т. Д.? - PullRequest
1 голос
/ 06 августа 2011

Я много работаю с векторами xyz в моей программе.Я использую их достаточно, чтобы дать каждому переменную (например, offset_x, offset_y и т. Д.) Становится утомительно и загромождает код.Теперь я мог бы поместить каждый набор x, y и в наборы (например, offset = (x, y, z)), но я обнаружил, что выполнение таких вещей, как offset [0] везде, делает код не столь читаемымкак я хотел бы, использование dict кажется слишком неэффективным.Numpy - это еще один вариант, многие его предложили, но на основании информации, найденной на Низкая производительность numpy.cross () , Nunpy может быть не совсем подходящим для коротких массивов, с которыми я имею дело,и у меня нет большого запаса для замедления частей моего сценария, так как некоторые части запускаются несколько раз в секунду.Есть ли что-нибудь эффективное и удобочитаемое?

1 Ответ

2 голосов
/ 06 августа 2011

Проверьте namedtuple , если вы ищете более читаемый кортеж. Точки - пример, приведенный в документации.

Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(11, y=22)     # instantiate with positional or keyword arguments
>>> p[0] + p[1]             # indexable like the plain tuple (11, 22)
33
>>> x, y = p                # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y               # fields also accessible by name
33
>>> p                       # readable __repr__ with a name=value style
Point(x=11, y=22)

Если вы заинтересованы в эффективности, ознакомьтесь с реализацией . Он использует __slots__ и собирается с использованием exec, поэтому он должен быть минимальным по сравнению с обычным кортежем.

Поскольку он написан на Python, вы можете исключить некоторые из ненужных методов, таких как __repr__, _asdict, _replace и __getnewargs__, чтобы еще больше уменьшить площадь.

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