Мне нужно создать векторное представление в cython и хотеть, чтобы оно имело максимально возможную производительность, что привело меня к использованию структур cython вместо классов cdef, так как я не хочу никаких накладных расходов на python.
Я создал структуру, которая инкапсулирует компоненты x, y и z, и добавил вспомогательные функции для построения и выполнения математических операций с этими векторами.
Хотя, возможно, мне еще удастся оптимизировать.
У меня есть эта структура и "конструктор":
ctypedef struct R3Vector:
double x, y, z
cdef inline R3Vector new_vector(double x, double y, double z) nogil:
cdef R3Vector ret
ret.x = x
ret.y = y
ret.z = z
return ret
И у меня есть метод «добавить»:
cdef inline R3Vector add_vectors(R3Vector a, R3Vector b) nogil:
cdef R3Vector ret
ret.x = a.x + b.x
ret.y = a.y + b.y
ret.z = a.z + b.z
return ret
Итак, добавление двух векторов выглядит так:
cdef R3Vector a = new_vector(10.0, 5.0, 2.5)
cdef R3Vector b = new_vector(8.0, 2.0, 3.1)
cdef R3Vector sum = add_vectors(a, b)
Но мне действительно не нравится, как эти методы вызываются повсюду. Я хотел бы, чтобы он был более похож на python без использования классов cdef:
cdef R3Vector a = R3Vector(10.0, 5.0, 2.5)
cdef R3Vector b = R3Vector(8.0, 2.0, 3.1)
cdef R3Vector sum = a + b
есть ли способ определить операторы типа +-/*
, которые работают в структурах c?