Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Adding np array objects to a list

I am trying to append a sub image which is numpy array objects to a list.

    temp = []
    for color in COLOUR_RANGE:
       #Some code to extract the color region which is represented in numpy 
        if cv2.contourArea(coloured_cnt) > 400:
            
            x, y, w, h = cv2.boundingRect(coloured_cnt)

            coloursRect = cv2.cvtColor(img[y:y+h, x:x+w], cv2.COLOR_BGR2RGB)
            coloursRect_1D = np.vstack(coloursRect)/255

            temp.append(coloursRect_1D.copy())
            print(len(temp))
            print(type(temp))

But the length of the list is added by two every loop.

2
<class 'list'>
4
<class 'list'>
6
<class 'list'>
8
<class 'list'>
10

However, if i create a new list as follows

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

    temp = [
        np.vstack(coloursRectList['blue'])/255,
        np.vstack(coloursRectList['green'])/255,
        np.vstack(coloursRectList['yellow'])/255,
        np.vstack(coloursRectList['red'])/255,
        np.vstack(coloursRectList['black'])/255,

    print('len of temp', len(temp))
    print('type of temp', type(temp))

The output is as expected

len of temp 6
type of temp <class 'list'>

I prefer the first method as it would be more dynamic so that I can

EXTRACTED = np.array(np.vstack(temp))

I am wondering how to append numpy object to a list properly. Any help is appreciated.


This is the temp after the first iteration. Since it is an subimage so it would be too big to be shown.
enter image description here


Code tried to reproduce the error with numpy but it fails to reappear.
I am not sure what goes wrong.

import numpy as np

mylist = []
a = np.zeros(shape=(96, 93, 3))
b = np.vstack(a)/255
print(a.shape)
print(type(a))
print(b.shape)
print(type(b))
for i in range(5):
    mylist.append(b.copy())
    print(len(mylist))

Output

(96, 93, 3)
<class 'numpy.ndarray'>
(8928, 3)
<class 'numpy.ndarray'>
1
2
3
4
5

>Solution :

Python list.append() method appends only a single element regardless of its type, it’s not possible to get the list length increased by two after a single append call. You must have "temp" changed in another place in the loop, please double-check.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading