将数据附加到'右边'数组的列和行(在Python中)

时间:2017-02-08 13:54:13

标签: python arrays

我们的想法是创建一个数组,其中第一个原始值中的值对应于管理单元的ID。第一列对应于此管理单元内的图像的标签。每张图片都有几个标签。因此,我们的想法是检查是否有任何标签已经附加到数组中,如果它们第一次出现,那么我会附加它们。如果之前出现的标签比此标签交叉处的元素和管理单元的ID应增加1(在第一次出现的情况下也是如此)。我已经堆积在这一部分了。所以,让我们说行政单位的ID是1,36,15,20,16,3。我知道现在我用标签分析图像狮子,牛,猫,熊猫和#39 ;在ID = 36的行政单位中。在我有标记“门”之前的某个地方,它在不同的行政单位中出现了好几次。所以我想有一个数组,看起来像:

[0, 1, 36, 15, 20, 16, 3],
['door', 5, 0, 0, 4, 0, 1],
['lion', 0, 1, 0, 0, 0, 0],
['cow', 0, 1, 0, 0, 0, 0],
['cat', 0, 1, 0, 0, 0, 0],
['panda', 0, 1, 0, 0, 0, 0]

到目前为止,我有空间部分,并且:

import numpy as np
tags_array = []
np.asarray(tags_array)
tags_array[0:] = [1, 36, 15, 20, 16, 3]
tags = 'lion,cow,cat,panda'
tags_sep = tags.split(',')
my_id = 36
for tag in tags_sep:
    #if tag is not yet in the array
    tags_array.append(tag) #to the first column
    tags_array.append(1) #to the column with the first row equal to 36
    #else add +1 to the element in the column 36 and row of the tag

任何提示都非常感谢!

1 个答案:

答案 0 :(得分:1)

如果您使用字典更容易,那么您可以轻松地将其更改为您想要的数组:

tags = 'lion,cow,cat,panda'.split(",")
id = 36

for i in range(len(tags)):
    if not id in ids:
        ids = np.append(ids, id)
        for key in dico.keys():
            dico[key] = np.append(dico[key], 0)

    if not tags[i] in dico.keys():
        dico[tags[i]] = np.zeros(len(ids)).astype(int)
        dico[tags[i]][int(np.where(ids==id)[0])] = 1
    else:
        dico[tags[i]][int(np.where(ids==id)[0])] += 1

当然,在您使用标记作为键定义dico之前:

dico={}
dico['door'] = [5, 0, 0, 4, 0, 1]
dico['lion'] = [0, 0, 0, 0, 0, 0]
dico['cow'] = [0, 0, 0, 0, 0, 0]
dico['cat'] = [0, 0, 0, 0, 0, 0]
dico['panda'] = [0, 0, 0, 0, 0, 0]

ids

ids = np.array([1, 36, 15, 20, 16, 3])