Я попытался смоделировать воксели трехмерного цилиндра с помощью следующего кода:
import math
import numpy as np
R0 = 500
hz = 1
x = np.arange(-1000, 1000, 1)
y = np.arange(-1000, 1000, 1)
z = np.arange(-10, 10, 1)
xx, yy, zz = np.meshgrid(x, y, z)
def density_f(x, y, z):
r_xy = math.sqrt(x ** 2 + y ** 2)
if r_xy <= R0 and -hz <= z <= hz:
return 1
else:
return 0
density = np.vectorize(density_f)(xx, yy, zz)
и на вычисление потребовалось много минут.
Эквивалентный неоптимальный код Java работает 10-15 секунд.
Как заставить Python вычислять воксели с одинаковой скоростью? Где оптимизировать?
numpy
больше похож на более старый MATLAB. Чтобы обойти это, вы использовали добавленные пакеты, такие какcython
иnumba
, которые создают собственный скомпилированный код. Я предполагаю, что вы достаточно знакомы с информатикой, чтобы понимать разницу между C, Java и Python. - person hpaulj   schedule 27.10.2018