RA FI
RA FI

Reputation: 33

How to access and save elements in "array of lists" using loop

I have a base64 encoded tsv file containing image information. I read it and decoded it. Here I am pasting the information of one image. The format is as follows:

{'199476': array([[194.04953 , 184.43268 , 639.      , 425.29    ],
       [318.4676  ,  15.762019, 421.1574  , 253.30766 ],
       [219.09093 , 258.60388 , 452.2419  , 384.9459  ],
       [  0.      ,  47.438347, 480.05542 , 425.29    ],
       [  0.      ,   0.      , 363.19708 , 279.19672 ],
       [148.79245 ,   0.      , 639.      , 210.85545 ],
       [  0.      ,   0.      , 258.4733  , 334.14972 ],
       [158.05794 , 320.6399  , 501.2573  , 425.29    ],
       [452.9518  ,   0.      , 639.      , 165.6061  ],
       [  0.      , 255.72142 , 407.57358 , 425.29    ],
       [  0.      ,  22.864079, 140.49962 , 183.17285 ],
       [361.452   , 212.55576 , 639.      , 388.3693  ],
       [554.8864  ,   0.      , 639.      , 101.53771 ],
       [404.05536 , 185.98639 , 578.6646  , 228.58595 ],
       [  0.      , 140.13982 , 123.02028 , 159.72864 ],
       [244.72183 , 250.01173 , 433.06476 , 369.9772  ],
       [128.43852 , 236.70012 , 473.5753  , 369.5989  ],
       [ 52.357124,  39.874092,  75.0104  ,  59.43568 ],
       [144.01859 , 125.3886  , 227.6077  , 204.53206 ],
       [236.9453  ,   0.      , 338.77094 , 123.54699 ],
       [543.54865 , 229.0633  , 627.2213  , 327.51517 ],
       [ 30.98246 , 158.72491 , 326.61508 , 277.84668 ],
       [338.70795 ,  80.93436 , 405.304   , 245.34258 ],
       [151.49304 , 129.96037 , 177.9043  , 200.56523 ],
       [ 94.5418  , 197.5486  , 316.87244 , 253.77058 ],
       [354.94272 ,   0.      , 464.82605 , 226.65717 ],
       [298.1035  , 156.23262 , 315.1587  , 191.82831 ],
       [414.6097  , 133.66512 , 639.      , 222.94992 ],
       [ 95.302864,  92.23008 , 126.67215 , 141.62634 ],
       [184.92436 , 133.2275  , 211.72473 , 199.64825 ],
       [446.2884  , 203.46916 , 631.4623  , 366.25217 ],
       [ 73.46329 , 189.02185 , 332.6924  , 204.93848 ],
       [575.9691  , 204.70457 , 639.      , 244.41171 ],
       [  9.975321, 115.68157 ,  88.33198 , 147.83711 ]], dtype=float32)}

The code I used is given below:

if __name__ == '__main__':
in_data = {}
with open(infile, "r+b") as tsv_in_file:
    reader = csv.DictReader(codecs.iterdecode(tsv_in_file,'utf-8'), delimiter='\t', fieldnames = FIELDNAMES)
    #print(reader)
    for item in reader:
        for field in ['boxes']:
            item[field] = np.frombuffer(base64.b64decode(item[field]), dtype=np.float32).reshape((int(item['num_boxes']),-1))
            in_data[item['image_id']]= item['boxes']
        break


print (in_data)

Now I am trying to save the values after applying formulas on array elements like this

    for item in reader:
        for field in ['boxes']:
            item[field] = np.frombuffer(base64.b64decode(item[field]), dtype=np.float32).reshape((int(item['num_boxes']),-1))
            in_data[item['image_id']] = (((item['boxes'][1][0])-(item['boxes'][0][0]))/(item['boxes'][0][2]))#[0]#[0]#[j]#[j]#[((i+1)-(j))]
            in_data[item['image_id']] = (((item['boxes'][1][1])-(item['boxes'][0][1]))/(item['boxes'][0][3]))
            in_data[item['image_id']] = ((item['boxes'][1][2])/(item['boxes'][0][2]))
            in_data[item['image_id']] = ((item['boxes'][1][3])/(item['boxes'][0][3]))
            in_data[item['image_id']]=(((item['boxes'][1][2])*(item['boxes'][1][3]))/((item['boxes'][0][2])*(item['boxes'][0][3])))
print (in_data)

But it only saves the last result. I want to save all of its answer as a 1st list containing 5 columns. How can I do that?

Also, I did it for 1st and 2nd list. I want to do it for 1st and 3rd list and upto to number of lists. I have hardcoded the indexes values. I need a loop but I am unable to apply loop here. Please help me with that

Upvotes: 0

Views: 69

Answers (1)

folen gateis
folen gateis

Reputation: 2012

you're always rewriting your result. try one of those

append version

in_data[item['image_id']] = []
in_data[item['image_id']].append(your_code_for_column_0)
in_data[item['image_id']].append(your_code_for_column_1)
...

assigning version

in_data[item['image_id']] = [0]*5
in_data[item['image_id']][0] = your_code_for_column_0
in_data[item['image_id']][1] = your_code_for_column_1
...

Upvotes: 1

Related Questions