使用列和行索引向量化函数

时间:2017-08-17 12:21:56

标签: python pandas dataframe

我已经构建了一个程序,它从一个数据帧中取值,并将它们用作另一个数据帧的输入。 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)))

1 个答案:

答案 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))

我已经检查过,运行速度超过十倍。