Numba не может определить тип итератора цикла ⇐ Python
-
Гость
Numba не может определить тип итератора цикла
В этом скрипте я пытаюсь вычислить нормали некоторых треугольников и объединить массивы. Поскольку другая часть программы очень медленная, я попытался ускорить ее с помощью numba.
normals = np.zeros(vertex_data.shape, dtype= np.float32) для i в диапазоне (0,vertex_data.shape[0],3): нормали[i:i+2] = self.calculate_normal(vertex_data, vertex_data[i+1], vertex_data[i+2]) vertex_data = np.hstack([нормали, vertex_data]) Когда я запускаю это, я получаю следующее сообщение об ошибке:
Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\experimental\jitclass\boxing.py», строка 61, в оболочке метод возврата (*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\dispatcher.py», строка 468, в _compile_for_args error_rewrite(e, 'ввод') Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\dispatcher.py», строка 409, в error_rewrite поднять e.with_traceback (нет) numba.core.errors.TypingError: Ошибка в конвейере режима nopython (шаг: интерфейс nopython) - Ошибка разрешения для буквальных аргументов: Ошибка в конвейере режима nopython (шаг: интерфейс nopython) Невозможно определить тип переменной «i», операция: $phi424.1, расположение: c:\Users\anton\OneDrive\Desktop\Python Programme\Marching_Cubes\chunk_vbo.py (312) Файл «chunk_vbo.py», строка 312: def get_vertex_data(self, voxel_grid): для i в диапазоне (0,vertex_data.shape[0],3): ^ - Ошибка разрешения небуквальных аргументов: Никто Во время: разрешение типа вызываемого объекта: BoundFunction((, 'get_vertex_data') например.jitclass.Chunk_VBO#217ae88d050) Во время: ввод вызова в (3) Файл «», строка 3: Я попробовал пропустить вычисления и просто принять np.zeros за нормальные значения. В результате появилось следующее сообщение:
Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\experimental\jitclass\boxing.py», строка 61, в оболочке метод возврата (*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\dispatcher.py», строка 468, в _compile_for_args error_rewrite(e, 'ввод') Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\dispatcher.py», строка 409, в error_rewrite поднять e.with_traceback (нет) numba.core.errors.TypingError: Ошибка в конвейере режима nopython (шаг: интерфейс nopython) - Ошибка разрешения для буквальных аргументов: Ошибка в конвейере режима nopython (шаг: интерфейс nopython) Невозможно определить тип переменной «normals», операция: вызов $304load_attr.2($316load_attr.4, func=$304load_attr.2, args=[Var($316load_attr.4, chunk_vbo.py:310)], kws= [('dtype', Var($338load_attr.6, chunk_vbo.py:310))], vararg=None, varkwarg=None, target=None), местоположение: c:\Users\anton\OneDrive\Desktop\Python Program \Marching_Cubes\chunk_vbo.py (310) Файл «chunk_vbo.py», строка 310: def get_vertex_data(self, voxel_grid): # вычисляем нормали треугольников нормали = np.zeros(vertex_data.shape, dtype= np.float32) ^ - Ошибка разрешения небуквальных аргументов: Никто Во время: разрешение типа вызываемого объекта: BoundFunction((, 'get_vertex_data') for example.jitclass.Chunk_VBO#21b870011d0) Во время: ввод вызова в (3) Файл «», строка 3: Когда цифра не используется, все работает отлично.
В этом скрипте я пытаюсь вычислить нормали некоторых треугольников и объединить массивы. Поскольку другая часть программы очень медленная, я попытался ускорить ее с помощью numba.
normals = np.zeros(vertex_data.shape, dtype= np.float32) для i в диапазоне (0,vertex_data.shape[0],3): нормали[i:i+2] = self.calculate_normal(vertex_data, vertex_data[i+1], vertex_data[i+2]) vertex_data = np.hstack([нормали, vertex_data]) Когда я запускаю это, я получаю следующее сообщение об ошибке:
Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\experimental\jitclass\boxing.py», строка 61, в оболочке метод возврата (*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\dispatcher.py», строка 468, в _compile_for_args error_rewrite(e, 'ввод') Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\dispatcher.py», строка 409, в error_rewrite поднять e.with_traceback (нет) numba.core.errors.TypingError: Ошибка в конвейере режима nopython (шаг: интерфейс nopython) - Ошибка разрешения для буквальных аргументов: Ошибка в конвейере режима nopython (шаг: интерфейс nopython) Невозможно определить тип переменной «i», операция: $phi424.1, расположение: c:\Users\anton\OneDrive\Desktop\Python Programme\Marching_Cubes\chunk_vbo.py (312) Файл «chunk_vbo.py», строка 312: def get_vertex_data(self, voxel_grid): для i в диапазоне (0,vertex_data.shape[0],3): ^ - Ошибка разрешения небуквальных аргументов: Никто Во время: разрешение типа вызываемого объекта: BoundFunction((, 'get_vertex_data') например.jitclass.Chunk_VBO#217ae88d050) Во время: ввод вызова в (3) Файл «», строка 3: Я попробовал пропустить вычисления и просто принять np.zeros за нормальные значения. В результате появилось следующее сообщение:
Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\experimental\jitclass\boxing.py», строка 61, в оболочке метод возврата (*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\dispatcher.py», строка 468, в _compile_for_args error_rewrite(e, 'ввод') Файл «C:\Users\anton\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\dispatcher.py», строка 409, в error_rewrite поднять e.with_traceback (нет) numba.core.errors.TypingError: Ошибка в конвейере режима nopython (шаг: интерфейс nopython) - Ошибка разрешения для буквальных аргументов: Ошибка в конвейере режима nopython (шаг: интерфейс nopython) Невозможно определить тип переменной «normals», операция: вызов $304load_attr.2($316load_attr.4, func=$304load_attr.2, args=[Var($316load_attr.4, chunk_vbo.py:310)], kws= [('dtype', Var($338load_attr.6, chunk_vbo.py:310))], vararg=None, varkwarg=None, target=None), местоположение: c:\Users\anton\OneDrive\Desktop\Python Program \Marching_Cubes\chunk_vbo.py (310) Файл «chunk_vbo.py», строка 310: def get_vertex_data(self, voxel_grid): # вычисляем нормали треугольников нормали = np.zeros(vertex_data.shape, dtype= np.float32) ^ - Ошибка разрешения небуквальных аргументов: Никто Во время: разрешение типа вызываемого объекта: BoundFunction((, 'get_vertex_data') for example.jitclass.Chunk_VBO#21b870011d0) Во время: ввод вызова в (3) Файл «», строка 3: Когда цифра не используется, все работает отлично.