Настройка:
b = np.array([['s','t'],['q','r']])
c = np.array([['s',' '],[' ',' ']])
a = np.array([[c,0,0,0,0,0],
[c,0,0,0,0,0],
[c,0,0,0,0,0],
[c,0,0,0,0,0],
[b,0,0,0,0,0],
[c,0,0,0,0,0],
[c,0,0,0,0,0],
[c,0,0,0,0,0],
[c,0,0,0,0,0]])
Предполагается, что вас интересует только колонка ноль;написать функцию, которая будет проверять каждый элемент в массиве one-d.И примените его к нулевому столбцу
def f(args):
return [np.all(thing==b) for thing in args]
>>> np.apply_along_axis(f,0,a[:,0])
array([False, False, False, False, True, False, False, False, False])
>>>
Используйте np.where на результат
>>> np.where(np.apply_along_axis(f,0,a[:,0]))
(array([4], dtype=int64),)
Или следуйте примечанию в numpy.where
документах:
>>> np.asarray(np.apply_along_axis(f,0,a[:,0])).nonzero()
(array([4], dtype=int64),)
Как указывает @hpaulj, np.apply_along_axis
не обязательно.так что
>>> [np.all(thing == b) for thing in a[:,0]]
[False, False, False, False, True, False, False, False, False]
>>> np.asarray([np.all(thing == b) for thing in a[:,0]]).nonzero()
(array([4], dtype=int64),)
И без итерации Python:
>>> (np.stack(a[:,0])==b).all(axis=(1,2))
array([False, False, False, False, True, False, False, False, False])
>>> (np.stack(a[:,0])==b).all(axis=(1,2)).nonzero()
(array([4], dtype=int64),)