Xét đoạn mã sau sử dụng mảng NumPy đó là rất chậm:Tăng tốc một vòng lặp cứng nhắc trong python?
# Intersection of an octree and a trajectory
def intersection(octree, trajectory):
# Initialize numpy arrays
ox = octree.get("x")
oy = octree.get("y")
oz = octree.get("z")
oe = octree.get("extent")/2
tx = trajectory.get("x")
ty = trajectory.get("y")
tz = trajectory.get("z")
result = np.zeros(np.size(ox))
# Loop over elements
for i in range(0, np.size(tx)):
for j in range(0, np.size(ox)):
if (tx[i] > ox[j]-oe[j] and
tx[i] < ox[j]+oe[j] and
ty[i] > oy[j]-oe[j] and
ty[i] < oy[j]+oe[j] and
tz[i] > oz[j]-oe[j] and
tz[i] < oz[j]+oe[j]):
result[j] += 1
# Finalize
return result
Làm thế nào để viết lại các chức năng để tăng tốc độ tính toán? (np.size(tx) == 10000
và np.size(ox) == 100000
)
Bạn cũng cân nhắc sử dụng OpenCL? –
Tôi không cần hiệu suất đầy đủ, tôi chỉ muốn tăng tốc độ thô. – Vincent
Tạo một 'scipy.spatial.KDTree' từ các điểm tx, ty, tz và sau đó sử dụng tìm kiếm gần nhất trong tiêu chuẩn vô cực cho mỗi điểm trong ox, oy, oz để xem liệu có điểm nào đủ gần không. –