Если вы намереваетесь использовать массив numpy, содержащий объекты, все сравнения будут выполняться с использованием самого python. В этот момент вы отказались почти от всех преимуществ numpy и можете также использовать список:
coords = coords.tolist()
index = next((i for i, n in enumerate(coords) if n[0] == (2, 5)), -1)
Если вы действительно хотите использовать numpy, я предлагаю вам соответствующим образом преобразовать ваши данные , На ум приходят два простых варианта. Вы можете либо расширить свой кортеж и создать массив формы (N, 4)
, либо вы можете создать структурированный массив, который сохраняет расположение данных как единое целое и имеет форму (N,)
. Первое намного проще, а последнее, на мой взгляд, более элегантно.
Если вы сгладите координаты:
coords = np.array([[x[0][0], x[0][1], x[1], x[2]] for x in coords])
index = np.flatnonzero(np.all(coords[:, :2] == [2, 5], axis=1))
Структурированное решение:
coordt = np.dtype([('x', np.int_), ('y', np.int_)])
dt = np.dtype([('coord', coordt), ('a', np.int_), ('b', np.int_)])
coords = np.array([((2, 1), 1613, 655), ((2, 5), 906, 245), ((5, 2), 0, 0)], dtype=dt)
index = np.flatnonzero(coords['coord'] == np.array((2, 5), dtype=coordt))
Вы также можете просто преобразовать первую часть ваших данных в реальный массив numpy и работать с ним:
coords = np.array(coords[:, 0].tolist())
index = np.flatnonzero((coords == [2, 5]).all(axis=1))