Tôi đã xây dựng một chương trình có thể lấy các giá trị từ một khung dữ liệu và sử dụng các giá trị đó làm đầu vào cho một khung dữ liệu khác. df_coordine là khung dữ liệu chứa các hàng tọa độ x và y (kích thước từ 0 đến max_size_x hoặc max_size_y). Update_coordines là một khung dữ liệu mới có kích thước của màn hình sử dụng tọa độ và một số loại khoảng cách Euclide để tọa độ biểu thị một khu vực chứ không phải pixel. Mã hoạt động như tôi mong đợi nhưng hiện tại rất chậm. Tôi biết quá trình vector hóa nhanh hơn nhiều và tôi cố gắng triển khai nó nhiều nhất có thể. Tuy nhiên, tôi dường như không thể tìm ra cách vector hóa bằng công thức sử dụng chỉ mục cột và hàng. Như bạn có thể thấy, trong .apply tôi đang sử dụng x.name và x.index, nhưng có cách nào để thực hiện việc này nhanh hơn không?
max_size_x = 1080
max_size_y = 720
đối với chỉ mục, hàng trong df_coordine.iterrows():
update_coordines = pd.DataFrame(np.zeros((max_size_x, max_size_y))) # việc cần làm: có thể trống thay vì số 0 và đã xóa những cái đó khỏi sự chú ý_max
current_time = df_coordine.loc[index]
tọa độ_x = current_time['x_coordine']
tọa độ_y = current_time['y_coordine']
# tính diện tích với khoảng cách Euclide:
update_coordines = update_coordines.apply(lambda x: 1/ ( np.power((np.sqrt(np.power(x.name-coordine_x,2) + np.power(x.index-coordine_y,2))),2 )))
Tôi đã tìm thấy câu trả lời bằng cách thêm phần sau vào bên ngoài vòng lặp:
df_x = pd.DataFrame(np.zeros((image_size_x, image_size_y)))
df_x = df_x.apply(lambda x: x.name)
df_y = pd.DataFrame(np.zeros((image_size_x, image_size_y)))
df_y = df_y.apply(lambda x: x.index)
Và thay thế hàm .apply bằng một vectơ:
update_coordines = 1/ ( * np.power((np.sqrt(np.power(df_x - gaze_x,2) + np.power(df_y - gaze_y,2))),2))
Tôi đã kiểm tra và nó chạy nhanh hơn gấp mười lần.
Tôi là một lập trình viên xuất sắc, rất giỏi!