Ваш массив состоит из двух кортежей:
In [53]: groups=np.array([('Species1',), ('Species2', 'Species3')], dtype=object)
In [54]: groups
Out[54]: array([('Species1',), ('Species2', 'Species3')], dtype=object)
In [55]: groups.shape
Out[55]: (2,)
Но будьте осторожны с такого рода определениями. Если бы кортежи были одного размера, массив имел бы другую форму, и элементы больше не были бы кортежами.
In [56]: np.array([('Species1',), ('Species2',), ('Species3',)], dtype=object)
Out[56]:
array([['Species1'],
['Species2'],
['Species3']], dtype=object)
In [57]: _.shape
Out[57]: (3, 1)
Любое использование where
только так же хорошо, как и логический массив, данный ему. Это where
возвращает пустое значение, потому что тест на равенство производит все False
:
In [58]: np.where(groups == groups[1])
Out[58]: (array([], dtype=int64),)
In [59]: groups == groups[1]
Out[59]: array([False, False])
Если я использую понимание списка для сравнения элементов группы:
In [60]: [g == groups[1] for g in groups]
Out[60]: [False, True]
In [61]: np.where([g == groups[1] for g in groups])
Out[61]: (array([1]),)
Но для такого рода вещей список был бы таким же хорошим
In [66]: alist = [('Species1',), ('Species2', 'Species3')]
In [67]: alist.index(alist[1])
Out[67]: 1
In [68]: alist.index(('Species1',))
Out[68]: 0
In [69]: alist.index(('Species2',))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-69-0b16b56ad28c> in <module>
----> 1 alist.index(('Species2',))
ValueError: ('Species2',) is not in list