У меня есть проект, в котором несколько вложенных циклов for замедляют время выполнения кода, поэтому я начал реализовывать некоторую типизацию Cython, и это значительно ускорило время выполнения циклов, но я столкнулся с новая проблема, типизация, которую я использую, не позволяет выполнять какие-либо вычисления для них. Вот макет моего кода:
cdef double[:,:] my_matrix = np.zeros([width, height])
for i in range(0,width):
for j in range(0,height):
a = v1[i] - v2[j]
my_matrix[i,j] = np.sqrt(a**2)
После этого я хочу вычислить произведение my_matrix
, используя
- Комплексное число
- Две константы
- Экспоненциальная функция
- Сама матрица, например, так:
product = constant1 * np.exp(-1j * constant2 * my_matrix) / my_matrix
При попытке этого я получаю ошибку:
TypeError: unsupported operand type(s) for *: 'complex' and 'my_cython_function_cy._memoryviewslice'
Я понимаю смысл этой ошибки, но я не понимаю, как использовать содержимое объекта memoryview в качестве массива, я попытался сделать это;
new_matrix = my_matrix
но это не скомпилируется. Я новичок как в C, так и в Cython, и документация не очень полезна для ответов на эти ладьи ie, поэтому я был бы очень признателен за любую помощь здесь.