Не работает 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)

Совет подсмотрен в этом баг репорте.

→ Ссылка