Как найти только первое вхождение в функции numpy.anywhere?

  • 12 августа 2023 г. 13:06
Ответы на вопрос 1
Для поиска только первого вхождения в функции `numpy.anywhere`, можно использовать метод `numpy.where`, который возвращает индексы элементов, удовлетворяющих условию, и затем взять только первый индекс с помощью `numpy.min`:

```python
import numpy as np

arr = np.array([1, 2, 3, 4, 3, 2, 1])
value = 3

first_index = np.min(np.where(arr == value))
print(first_index)
```

Относительно функции `numpy.argwhere`, если вы хотите найти индекс первого элемента, удовлетворяющего условию, без сортировки всех индексов, удовлетворяющих условию, можно воспользоваться методом `numpy.nonzero` или `numpy.flatnonzero`, а затем взять только первый индекс:

```python
import numpy as np

arr = np.array([1, 2, 3, 4, 3, 2, 1])
value = 3

first_index = np.nonzero(arr == value)[0][0]
print(first_index)
```

В вашем конкретном случае с использованием функции `numpy.argwhere`, можно сделать также:

```python
import numpy as np

data_for_learn = np.array([[1, 2], [3, 4], [5, 6]])
time_mark = 2
limit_val = 3
data = {'LIMIT': 4}

condition = (data_for_learn[:, 0] > time_mark) & ((data_for_learn[:, 1] - limit_val) >= data['LIMIT'])
first_index = np.argwhere(condition)[0][0]

print(first_index)
```

При использовании `numpy.argwhere` само условие будет работать только со списком индексов, которые удовлетворяют условию. Поэтому в данном случае применяется метод `numpy.argwhere`, а затем берется только первый индекс с помощью `[0][0]`.
Похожие вопросы