Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+687новых вакансий за сутки·55 254вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 791
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python7 042
  • Облачные технологии5 085
  • QA вакансии1 814
  • Android1 199
  • Инженер данных831
  • Продакт-менеджер339

Разработка

  • iOS1 135
  • Backend вакансии1 131
  • Fullstack вакансии475
  • AI вакансии458
  • Frontend вакансии404
  • Mobile вакансии27

По стеку

  • Go4 093
  • Java2 435
  • Kotlin990
  • Node.js827
  • Rust665
  • .NET525
  • PHP282
  • C++223
  • C#199

DevOps и инфраструктура

  • Kubernetes2 931
  • Linux-инфраструктура2 312
  • DevOps вакансии2 110
  • Terraform / IaC1 714
  • CI/CD872
  • Мониторинг и Observability825
  • SRE253
  • Кибербезопасность50

Аналитика и данные

  • Аналитик данных497
  • Data Scientist463
  • Бизнес-аналитик374
  • Системный аналитик54

Другие направления

  • Проджект-менеджер119
  • UI/UX дизайн72
  • Ручное тестирование14

По регионам

  • Вакансии в США25 531
  • Вакансии в Европе9 792
  • Работа в России3 193
  • Вакансии в Канаде2 236

По формату

  • Удалённые вакансии43 578
  • Релокация в США25 531
  • Гибридная работа4 289
  • Офисная работа3 340

По уровню

  • Senior вакансии21 650
  • Middle вакансии12 211
  • Junior вакансии3 886

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise125 вакансий
  • Celonis28 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen17 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме NumPyВсе вопросы
NumPyJuniorКодинг

Как работает np.where() и каковы его типичные сценарии использования?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

np.where(condition, x, y) возвращает элементы из x там, где condition True, из y — где False. С одним аргументом возвращает индексы ненулевых элементов. Используется для векторизованных условий без Python-циклов.

Базовый синтаксис

import numpy as np

# Форма 1: np.where(condition, x, y)
# Возвращает массив той же формы: x[i] если condition[i] True, иначе y[i]
a = np.array([1, -2, 3, -4, 5])
result = np.where(a > 0, a, 0)   # ReLU: отрицательные -> 0
print(result)  # [1 0 3 0 5]

# Форма 2: np.where(condition)
# Возвращает TUPLE индексов (аналог np.nonzero)
indices = np.where(a > 0)        # (array([0, 2, 4]),)
print(a[indices])                 # [1 3 5]

# Для 2D-массива возвращает кортеж из N массивов (по одному на ось)
M = np.array([[1, -2], [-3, 4]])
rows, cols = np.where(M > 0)
print(rows, cols)  # [0 1] [0 1] — позиции положительных элементов

np.where() в NumPy

np.where — векторизованная условная операция. Существует в двух формах: с тремя аргументами (условие + два значения) и с одним аргументом (поиск индексов).

Практические сценарии

# 1. Замена аномальных значений (clipping с условием)
temperatures = np.array([22.5, 999.0, 18.3, -999.0, 25.1])  # 999 = sensor error
cleaned = np.where(
    np.abs(temperatures) > 100,
    np.nan,
    temperatures
)
print(cleaned)  # [ 22.5  nan  18.3  nan  25.1]

# 2. Бинаризация (threshold)
scores = np.array([0.2, 0.7, 0.45, 0.9, 0.3])
labels = np.where(scores >= 0.5, 1, 0)
print(labels)  # [0 1 0 1 0]

# 3. Множественные условия через np.select (обобщение np.where)
ages = np.array([5, 15, 25, 65, 80])
conditions = [
    ages < 13,
    ages < 18,
    ages < 65,
]
choices = ['child', 'teen', 'adult']
groups = np.select(conditions, choices, default='senior')
print(groups)  # ['child' 'teen' 'adult' 'senior' 'senior']

# 4. Векторизованный lookup (замена dict.get)
category_ids = np.array([0, 2, 1, 3, 1])
category_names = np.array(['cat', 'dog', 'bird', 'fish'])
names = category_names[category_ids]  # fancy indexing
print(names)  # ['cat' 'bird' 'dog' 'fish' 'bird']

# 5. Условное присваивание in-place
prices = np.array([100.0, 50.0, 200.0, 30.0])
# Скидка 10% для товаров дороже 80
prices[prices > 80] *= 0.9   # через boolean indexing + in-place
# или через where:
new_prices = np.where(prices > 80, prices * 0.9, prices)

# 6. Нахождение ближайшего значения
bins = np.array([0, 10, 20, 30, 40, 50])
val = 23
idx = np.where(bins <= val)[0][-1]  # последний bin <= val
print(f"Value {val} falls in bin starting at {bins[idx]}")  # bin 20

# 7. Маскирование в pandas-стиле без pandas
X = np.random.randn(100, 5).astype(np.float32)
mask = np.where(np.isnan(X))    # найти NaN
X[mask] = 0.0                    # заменить нулями

Производительность vs Python-цикл

import time

data = np.random.randn(1_000_000).astype(np.float32)

# Python цикл: медленно
start = time.perf_counter()
result_loop = [x if x > 0 else 0.0 for x in data]
print(f"Loop: {time.perf_counter() - start:.3f}s")

# np.where: быстро
start = time.perf_counter()
result_np = np.where(data > 0, data, 0.0)
print(f"np.where: {time.perf_counter() - start:.4f}s")
# Loop: ~0.3s, np.where: ~0.003s — в 100 раз быстрее

Подводные камни

  • Оба аргумента x и y вычисляются всегда, даже если они не нужны — np.where(mask, 1/a, 0) при a=0 всё равно вызовет деление на ноль для всех элементов.
  • С одним аргументом np.where(condition) возвращает кортеж массивов, а не один массив — распаковка idx = np.where(a > 0)[0] обязательна для 1D.
  • Тип результата определяется по x и y через broadcasting: np.where(cond, int_arr, float_arr) даёт float64 — может неожиданно поменять dtype.
  • На очень больших массивах np.where создаёт временный булевый массив той же формы — потребление памяти увеличивается на N байт (N = len(array)).
  • np.where не ленивый — для сложных условий с несколькими порогами np.select чище и эффективнее цепочки вложенных np.where.
  • При работе с NaN: np.where(np.isnan(x), 0, x) работает корректно, но np.where(x > 0, x, np.nan) меняет dtype на float64 даже для float32-массива.

Частые вопросы на собеседовании

  • Что такое универсальные функции (ufuncs) в NumPy и почему они эффективны?
  • Что такое NumPy и почему он быстрее нативных списков Python для числовых вычислений?
  • Как расположение памяти (C-order vs Fortran-order) влияет на производительность массивов NumPy?
  • В каких data/AI-задачах NumPy даёт реальный выигрыш, а где лучше выбрать другой инструмент или более простой pipeline?

Типичные ошибки

  • Объяснять where conditional selection только синтаксисом без shape, dtype, состояния или режима выполнения.
  • Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
  • Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.

Что проверяет интервьюер

  • Может ли связать where conditional selection с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.

Как вы знаете этот вопрос?

Проверить себя по теме NumPy →

Источники

  • https://numpy.org/doc/stable/reference/generated/numpy.where.html
←Предыдущий вопросКак сравнить NumPy с альтернативами по качеству, скорости экспериментов, масштабированию, воспроизводимости и production-интеграции?Следующий вопрос→Какие ошибки делают команды, когда переносят notebook/prototype-подход на production data/AI pipeline?

Связанные темы

NumPydata-aidata-processingperformance-debugging

Вакансии с этим навыком

  • 📑 Вакансия Junior Data Scientist / ML Engineer