我已经构建了一个程序,它从一个数据帧中取值,并将它们用作另一个数据帧的输入。 df_coordinate是具有x和y坐标行的数据帧(大小在0和max_size_x之间或max_size_y)。 updated_coordinates是一个具有屏幕大小的新数据帧,它使用坐标和一种欧几里德距离来使坐标代表区域而不是像素。 代码按照我的意图工作,但现在它是缓慢的方式。我知道矢量化更快,我尽可能地尝试实现它。然而, 我似乎找不到如何使用列和行索引的公式进行矢量化的方法。使用.apply我可以看到x.name和x.index,但有没有办法更快地实现它?
max_size_x = 1080
max_size_y = 720
for index, row in df_coordinate.iterrows():
updated_coordinates = pd.DataFrame(np.zeros((max_size_x, max_size_y))) # to do: maybe empty instead of zeroes, and already delete the ones from attention_max
current_time = df_coordinate.loc[index]
coordinate_x = current_time['x_coordinate']
coordinate_y = current_time['y_coordinate']
# calculate area with Euclidean distance:
updated_coordinates = updated_coordinates.apply(lambda x: 1/ ( np.power((np.sqrt(np.power(x.name-coordinate_x,2) + np.power(x.index-coordinate_y,2))),2)))
答案 0 :(得分:1)
我找到了答案,在循环之外添加了这个:
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)
用矢量替换.apply函数:
updated_coordinates = 1/ ( * np.power((np.sqrt(np.power(df_x - gaze_x,2) + np.power(df_y - gaze_y,2))),2))
我已经检查过,运行速度超过十倍。