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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 146
  • Облачные технологии14 070
  • QA вакансии3 446
  • Backend вакансии2 089
  • Инженер данных1 792
  • Продакт-менеджер1 233

Разработка

  • Android1 863
  • iOS1 701
  • Fullstack вакансии976
  • AI вакансии944
  • Frontend вакансии738
  • Mobile вакансии44

По стеку

  • Go8 699
  • Java6 545
  • Node.js2 025
  • .NET1 723
  • Kotlin1 613
  • Rust1 462
  • C#710
  • PHP684
  • C++574

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

  • Kubernetes7 765
  • DevOps вакансии6 051
  • Linux-инфраструктура5 492
  • Terraform / IaC4 271
  • CI/CD3 242
  • Мониторинг и Observability1 790
  • SRE565
  • Кибербезопасность451

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

  • Data Scientist1 124
  • Бизнес-аналитик916
  • Аналитик данных839
  • Системный аналитик151

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

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

По регионам

  • Вакансии в США43 473
  • Вакансии в Европе23 552
  • Вакансии в Канаде4 444
  • Работа в России3 902

По формату

  • Удалённые вакансии72 758
  • Релокация в США43 100
  • Гибридная работа12 402
  • Офисная работа7 096

По уровню

  • Senior вакансии42 000
  • Middle вакансии20 393
  • Junior вакансии6 602

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 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-массива.

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

  • Объяснять 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

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

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