Here is the getImgIds
from the pycocotools
:
pycocotools/coco.py:
def getImgIds(self, imgIds=[], catIds=[]):
'''
Get img ids that satisfy given filter conditions.
:param imgIds (int array) : get imgs for given ids
:param catIds (int array) : get imgs with all given cats
:return: ids (int array) : integer array of img ids
'''
imgIds = imgIds if _isArrayLike(imgIds) else [imgIds]
catIds = catIds if _isArrayLike(catIds) else [catIds]
if len(imgIds) == len(catIds) == 0:
ids = self.imgs.keys()
else:
ids = set(imgIds)
for i, catId in enumerate(catIds):
if i == 0 and len(ids) == 0:
ids = set(self.catToImgs[catId])
else:
ids &= set(self.catToImgs[catId])
return list(ids)
Here is the test code
for simulating
the value of ids &= set(self.catToImgs[catId])
:
fruits = set(['apple', 'banana', 'cherry'])
cars = set(['Ford', 'BMW', 'Volvo'])
fruits &= cars
print("fruits: len:{}, type: {}, values: {}".format(
len(fruits), type(fruits), fruits
))
Here is the result:
fruits: len:0, type: <class 'set'>, values: set()
I got a result of len = 0
.
How to understand the meaning of the above &=
operator for the set()
class?
This might be useful : https://python-reference.readthedocs.io/en/latest/docs/sets/op_intersection.html
In other words, &
is the "bitwise and" operator. With the syntax &=
, you have a &= b
that is equivalent to a = a & b
. For sets, it is the intersection of the two sets (as explained in the documentation linked above).
If no elements are common in both sets, it will return an empty set.