【问题标题】:Mapping a dictionary to a vector to get a set of indexed vectors将字典映射到向量以获取一组索引向量
【发布时间】:2017-11-19 19:06:13
【问题描述】:

我有以下长度为 200 的向量,其中包含如下参考剪辑列表:

clips_reference_name=['v_ApplyEyeMakeup_g08_c01',
 'v_ApplyEyeMakeup_g08_c02',
 'v_ApplyEyeMakeup_g08_c03',
 'v_ApplyEyeMakeup_g08_c04',
 'v_ApplyEyeMakeup_g08_c05',
 'v_ApplyEyeMakeup_g09_c01',
 'v_ApplyEyeMakeup_g09_c02',
 'v_ApplyEyeMakeup_g09_c03',
 'v_ApplyEyeMakeup_g09_c04',
 'v_ApplyEyeMakeup_g09_c05',
 'v_ApplyEyeMakeup_g09_c06',
 'v_ApplyEyeMakeup_g09_c07',
 'v_ApplyEyeMakeup_g10_c01',
 'v_ApplyEyeMakeup_g10_c02',
 'v_ApplyEyeMakeup_g10_c03',
 'v_ApplyEyeMakeup_g10_c04',
 'v_ApplyEyeMakeup_g10_c05',
 'v_ApplyEyeMakeup_g11_c01',
 'v_ApplyEyeMakeup_g11_c02',
 'v_ApplyEyeMakeup_g11_c03',
 'v_ApplyLipstick_g08_c01',
 'v_ApplyLipstick_g08_c02',
 'v_ApplyLipstick_g08_c03',
 'v_ApplyLipstick_g08_c04',
 'v_ApplyLipstick_g09_c01',
 'v_ApplyLipstick_g09_c02',
 'v_ApplyLipstick_g09_c03',
 'v_ApplyLipstick_g09_c04',
 'v_ApplyLipstick_g10_c01',
 'v_ApplyLipstick_g10_c02',
 'v_ApplyLipstick_g10_c03',
 'v_ApplyLipstick_g10_c04',
 'v_ApplyLipstick_g11_c01',
 'v_ApplyLipstick_g11_c02',
 'v_ApplyLipstick_g11_c03',
 'v_ApplyLipstick_g11_c04',
 'v_ApplyLipstick_g12_c01',
 'v_ApplyLipstick_g12_c02',
 'v_ApplyLipstick_g12_c03',
 'v_ApplyLipstick_g12_c04',
 'v_Archery_g08_c01',
 'v_Archery_g08_c02',
 'v_Archery_g08_c03',
 'v_Archery_g08_c04',
 'v_Archery_g08_c05',
 'v_Archery_g09_c01',
 'v_Archery_g09_c02',
 'v_Archery_g09_c03',
 'v_Archery_g09_c04',
 'v_Archery_g09_c05',
 'v_Archery_g09_c06',
 'v_Archery_g09_c07',
 'v_Archery_g10_c01',
 'v_Archery_g10_c02',
 'v_Archery_g10_c03',
 'v_Archery_g10_c04',
 'v_Archery_g10_c05',
 'v_Archery_g10_c06',
 'v_Archery_g10_c07',
 'v_Archery_g11_c01',
 'v_BabyCrawling_g08_c01',
 'v_BabyCrawling_g08_c02',
 'v_BabyCrawling_g08_c03',
 'v_BabyCrawling_g08_c04',
 'v_BabyCrawling_g09_c01',
 'v_BabyCrawling_g09_c02',
 'v_BabyCrawling_g09_c03',
 'v_BabyCrawling_g09_c04',
 'v_BabyCrawling_g09_c05',
 'v_BabyCrawling_g09_c06',
 'v_BabyCrawling_g10_c01',
 'v_BabyCrawling_g10_c02',
 'v_BabyCrawling_g10_c03',
 'v_BabyCrawling_g10_c04',
 'v_BabyCrawling_g10_c05',
 'v_BabyCrawling_g11_c01',
 'v_BabyCrawling_g11_c02',
 'v_BabyCrawling_g11_c03',
 'v_BabyCrawling_g11_c04',
 'v_BabyCrawling_g12_c01',
 'v_BalanceBeam_g08_c01',
 'v_BalanceBeam_g08_c02',
 'v_BalanceBeam_g08_c03',
 'v_BalanceBeam_g08_c04',
 'v_BalanceBeam_g09_c01',
 'v_BalanceBeam_g09_c02',
 'v_BalanceBeam_g09_c03',
 'v_BalanceBeam_g09_c04',
 'v_BalanceBeam_g10_c01',
 'v_BalanceBeam_g10_c02',
 'v_BalanceBeam_g10_c03',
 'v_BalanceBeam_g10_c04',
 'v_BalanceBeam_g11_c01',
 'v_BalanceBeam_g11_c02',
 'v_BalanceBeam_g11_c03',
 'v_BalanceBeam_g11_c04',
 'v_BalanceBeam_g12_c01',
 'v_BalanceBeam_g12_c02',
 'v_BalanceBeam_g12_c03',
 'v_BandMarching_g08_c01',
 'v_BandMarching_g08_c02',
 'v_BandMarching_g08_c03',
 'v_BandMarching_g08_c04',
 'v_BandMarching_g08_c05',
 'v_BandMarching_g08_c06',
 'v_BandMarching_g08_c07',
 'v_BandMarching_g09_c01',
 'v_BandMarching_g09_c02',
 'v_BandMarching_g09_c03',
 'v_BandMarching_g09_c04',
 'v_BandMarching_g09_c05',
 'v_BandMarching_g09_c06',
 'v_BandMarching_g09_c07',
 'v_BandMarching_g10_c01',
 'v_BandMarching_g10_c02',
 'v_BandMarching_g10_c03',
 'v_BandMarching_g10_c04',
 'v_BandMarching_g10_c05',
 'v_BandMarching_g10_c06',
 'v_BandMarching_g10_c07',
 'v_BaseballPitch_g08_c01',
 'v_BaseballPitch_g08_c02',
 'v_BaseballPitch_g08_c03',
 'v_BaseballPitch_g08_c04',
 'v_BaseballPitch_g08_c05',
 'v_BaseballPitch_g08_c06',
 'v_BaseballPitch_g08_c07',
 'v_BaseballPitch_g09_c01',
 'v_BaseballPitch_g09_c02',
 'v_BaseballPitch_g09_c03',
 'v_BaseballPitch_g09_c04',
 'v_BaseballPitch_g09_c05',
 'v_BaseballPitch_g09_c06',
 'v_BaseballPitch_g09_c07',
 'v_BaseballPitch_g10_c01',
 'v_BaseballPitch_g10_c02',
 'v_BaseballPitch_g10_c03',
 'v_BaseballPitch_g10_c04',
 'v_BaseballPitch_g10_c05',
 'v_BaseballPitch_g11_c01',
 'v_Basketball_g08_c01',
 'v_Basketball_g08_c02',
 'v_Basketball_g08_c03',
 'v_Basketball_g08_c04',
 'v_Basketball_g09_c01',
 'v_Basketball_g09_c02',
 'v_Basketball_g09_c03',
 'v_Basketball_g09_c04',
 'v_Basketball_g09_c05',
 'v_Basketball_g10_c01',
 'v_Basketball_g10_c02',
 'v_Basketball_g10_c03',
 'v_Basketball_g10_c04',
 'v_Basketball_g10_c05',
 'v_Basketball_g11_c01',
 'v_Basketball_g11_c02',
 'v_Basketball_g11_c03',
 'v_Basketball_g11_c04',
 'v_Basketball_g11_c05',
 'v_Basketball_g12_c01',
 'v_BasketballDunk_g08_c01',
 'v_BasketballDunk_g08_c02',
 'v_BasketballDunk_g08_c03',
 'v_BasketballDunk_g08_c04',
 'v_BasketballDunk_g08_c05',
 'v_BasketballDunk_g09_c01',
 'v_BasketballDunk_g09_c02',
 'v_BasketballDunk_g09_c03',
 'v_BasketballDunk_g09_c04',
 'v_BasketballDunk_g09_c05',
 'v_BasketballDunk_g10_c01',
 'v_BasketballDunk_g10_c02',
 'v_BasketballDunk_g10_c03',
 'v_BasketballDunk_g10_c04',
 'v_BasketballDunk_g10_c05',
 'v_BasketballDunk_g11_c01',
 'v_BasketballDunk_g11_c02',
 'v_BasketballDunk_g11_c03',
 'v_BasketballDunk_g11_c04',
 'v_BasketballDunk_g11_c05',
 'v_BenchPress_g08_c01',
 'v_BenchPress_g08_c02',
 'v_BenchPress_g08_c03',
 'v_BenchPress_g08_c04',
 'v_BenchPress_g08_c05',
 'v_BenchPress_g08_c06',
 'v_BenchPress_g08_c07',
 'v_BenchPress_g09_c01',
 'v_BenchPress_g09_c02',
 'v_BenchPress_g09_c03',
 'v_BenchPress_g09_c04',
 'v_BenchPress_g09_c05',
 'v_BenchPress_g09_c06',
 'v_BenchPress_g09_c07',
 'v_BenchPress_g10_c01',
 'v_BenchPress_g10_c02',
 'v_BenchPress_g10_c03',
 'v_BenchPress_g10_c04',
 'v_BenchPress_g11_c01',
 'v_BenchPress_g11_c02']

每个剪辑参考名称都与一组图像相关联。例如: clips_reference_name 中的第一个引用。 'v_ApplyEyeMakeup_g08_c01',是 与一组图像(本例为 300 张图像)相关联,在以下代码中称为 labels

v_ApplyEyeMakeup_g08_c01.**0001**.jpeg, ..., v_ApplyEyeMakeup_g08_c01.**0300**.jpeg,

每个参考名称的图像数量因图像而异。

我有一个框架字典(图像名称),它们的值如下:

dataset= dict(zip(labels, frames))

labels 是一个具有如下值的列表:

v_BasketballDunk_g08_c04_0018.jpeg
v_BandMarching_g10_c05_0097.jpeg
v_BabyCrawling_g11_c01_0010.jpeg
v_ApplyEyeMakeup_g09_c04_0148.jpeg
v_Archery_g08_c01_0008.jpeg
v_BalanceBeam_g11_c02_0058.jpeg
v_BaseballPitch_g09_c05_0002.jpeg
v_ApplyLipstick_g08_c02_0044.jpeg
v_Basketball_g11_c01_0062.jpeg
v_BenchPress_g11_c02_0012.jpeg

帧是 2048 个值的一维向量。

例如:从(labels, frames)创建的字典的第一项如下:

{'v_BasketballDunk_g08_c02_0053.jpeg':
    array([ 0.88717347,  0.51302141,  0.87405699, ...,  0.41013849,
            0.38836521,  0.37444678], dtype=float32), .....}

我想得到什么?

由于我在 clips_reference_name 中有 200 个项目,我想得到每个项目对应的 200 个向量,如下所示:

vector-labels_v_ApplyEyeMakeup_g08_c02 = [v_ApplyEyeMakeup_g08_c02_0001.jpeg,
                                          v_ApplyEyeMakeup_g08_c02_0002.jpeg ,
                                          ...,
                                          v_ApplyEyeMakeup_g08_c02_0300.jpeg]
 vector-frme-values_v_ApplyEyeMakeup_g08_c02 = [[0.47,...,0.98], ..., [0.17,...,0.45]]

 vector_labels-v_BabyCrawling_g09_c02 = [v_BabyCrawling_g09_c02_0001.jpeg,
                                         v_BabyCrawling_g09_c02_0002.jpeg,
                                         ...,
                                         v_BabyCrawling_g09_c02_0248.jpeg]
 vector-frme-values_v_BabyCrawling_g09_c02 = [[0.77,...,0.28], ..., [0.18,...,0.17]]

我们查找每个剪辑参考名称并查找其对应的图像: clips_reference_name+'_0001'.png, clips_reference_name+'_0002'.png ... 并将它们附加到同一个向量中。

所以,最后我得到了 200 个向量,每个向量代表剪辑参考名称的图像名称。

我做错了什么?

我无法创建 2*200 向量(然后每个向量的项目数会根据描述剪辑参考名称的图像数量而变化)。

如何使用剪辑参考名称命名每个向量。向量采用整数索引而不是字符串。

我发现做一个字典,其中键代表剪辑参考名称,每个剪辑参考名称的值是与每个剪辑参考名称关联的图像集。因此,对于每个键,我们有多个值(一组标签和一组帧值(每个标签的一维向量 2048),这变得难以操作。

【问题讨论】:

  • 看起来像 X-Y 问题。如果您需要按字符串索引,那么您需要字典而不是列表,但根据您的要求,并不明显您需要其中任何一个。这是开发中最困难的部分:您必须首先指定您需要什么,写下(用文本或建模语言)总体设计,专注于需要它的部分的算法,只有他们开始编码。抱歉,您的问题对我来说似乎不清楚。

标签: python dictionary vector


【解决方案1】:

如果我没听错,那么您将尝试按标签和框架的参考名称对它们进行分组,这对应于标签名称的第一部分(直到倒数第二个 _)。

然后您可以为这两个组创建字典。

grouped_labels = {}
grouped_frames = {}

然后用“组键”填充,如上所述。

for label, frames in dataset.items():
    key = label.rsplit('_', 1)[0]
    grouped_labels.setdefault(key, []).append(label)
    grouped_frames.setdefault(key, []).append(frames)

最后,您可以通过以下方式轻松获取组的标签和框架:

for crn in clips_reference_name:
    crn_labels = grouped_labels.get(crn, [])
    crn_frames = grouped_frames.get(crn, [])
    # do something with group's labels and frames...

【讨论】:

  • 感谢@grovina 的回答。当我运行第二个 for 循环(crn in clips_reference_name)时,我不确定你的第三个 bloc 代码(组的标签和框架)是否理解我得到空的 crn_labels 和空的 crn_frames!
  • 尝试print(list(grouped_labels))print(list(grouped_frames)) 查看创建的密钥,它们是否符合您的预期?
  • 是的,它们是连贯的
  • 但是 crn_labels = grouped_labels.get(crn, []) crn_frames = grouped_frames.get(crn, []) 返回空向量
  • 这可能是因为密钥crn 不在grouped_* 中。例如,您可以像 for group, label in grouped_labels.items(): 一样迭代字典(类似于帧)。
猜你喜欢
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多