Не работает njit numba при выполнении reshape
При выполнении функции njit в моем коде:
from numba import njit
@njit(fastmath=True)
def project(vertices, camera_matrix, projection_matrix, to_screen_matrix):
vertices = vertices @ camera_matrix
vertices = vertices @ projection_matrix
vertices[vertices[:, 2] < 0] = 0
vertices /= vertices[:, -1].reshape(-1, 1)
vertices = vertices @ to_screen_matrix
return vertices[:, :2]
Выдаётся ошибка:
TypeError: reshape() supports contiguous array only
Вот переменная vertices:
vertices = [
(-1.5, -1.5, -1.5, 1),
(-1.5, -1.5, 1.5, 1),
(-1.5, 1.5, -1.5, 1),
(-1.5, 1.5, 1.5, 1),
(1.5, -1.5, -1.5, 1),
(1.5, -1.5, 1.5, 1),
(1.5, 1.5, -1.5, 1),
(1.5, 1.5, 1.5, 1)
]
Как её исправить?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Если перед reshape
сделать copy
, то вроде работает на урезанном варианте вашей функции, а без copy
эта функция падает с такой же как у вас ошибкой. Урезанный вариант пришлось сделать потому, что я не знаю значения остальных ваших переменных, пришлось их выкинуть из функции. Но ситуация моделируется и без них.
from numba import njit
import numpy as np
@njit(fastmath=True)
def project(vertices):
vertices[vertices[:, 2] < 0] = 0
vertices /= vertices[:, -1].copy().reshape(-1, 1)
^^^^^^^ вот тут
return vertices[:, :2]
vertices = np.array([
(-1.5, -1.5, -1.5, 1),
(-1.5, -1.5, 1.5, 1),
(-1.5, 1.5, -1.5, 1),
(-1.5, 1.5, 1.5, 1),
(1.5, -1.5, -1.5, 1),
(1.5, -1.5, 1.5, 1),
(1.5, 1.5, -1.5, 1),
(1.5, 1.5, 1.5, 1)
])
project(vertices)
Совет подсмотрен в этом баг репорте.