[英]Fastest way to store and save coordinate data in a loop
我得到视频中每一帧的面部标志。 有477
个路标,每个路标都是一个(3,)
向量。
我有一个 30 fps 的 10 分钟视频。 这意味着我有18000
个形状为(477,3)
的 arrays 。 我想将所有这些信息存储在 pandas dataframe 中,其中每一行是一个框架并且有 477 列,每个 (3,) 数组一个。
目前,我正在这样做:
frame_lms = []
for frame in video:
landmark_dict = {}
lm_count = 0
for landmark in frame:
x = landmark.x
y = landmark.y
xy = np.array([x,y])
landmark_dict[f"lm_{count}"] = xy
lm_count+=1
frame_lms.append(landmark_dict)
df = pd.DataFrame.from_dict(frame_lms)
df.to_csv('save.csv')
我想到将所有内容存储在字典列表中,append 到列表中,然后从研究中保存,表明from_dict
是创建 pandas df 的最快方法。 但是,这个过程仍然很慢,因为我必须将frame_lms
保存在 state 中,因为我将 append (477,3)
arrays 放入其中。
解决此类问题的计算效率最高的方法是什么?
最好避免在循环中创建这么多对象。 您可以使用以下方法获得相同的结果(省略标题):
import numpy as np
# load video here
storage = np.empty((len(video), 477, 2))
for frame, s_line in zip(video, storage):
for landmark, l_buf in zip(frame, s_line):
l_buf[0] = landmark.x
l_buf[1] = landmark.y
现在存储拥有您需要的所有数据。 请注意,代码可以改进。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.