Новое: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Теория

Каковы атрибуты ndarray: shape, dtype, ndim, size и strides?

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

shape — размеры осей, dtype — тип элементов, ndim — число осей, size — общее число элементов, strides — байтовые шаги между элементами по каждой оси (основа zero-copy срезов и транспонирования).

strides

Кортеж, задающий количество байт, на которое нужно сдвинуться в памяти, чтобы перейти к следующему элементу по каждой оси. Это ключ к пониманию того, как NumPy реализует срезы без копирования данных.

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6]], dtype=np.float64)

print(arr.shape)   # (2, 3)
print(arr.dtype)   # float64
print(arr.ndim)    # 2
print(arr.size)    # 6
print(arr.strides) # (24, 8)  -- 3 элемента * 8 байт по строке, 8 байт по столбцу

# Проверим strides вручную:
# float64 занимает 8 байт
# чтобы перейти к следующей строке (ось 0), нужно пропустить 3 * 8 = 24 байта
# чтобы перейти к следующей колонке (ось 1), нужно пропустить 1 * 8 = 8 байт

# Транспонирование меняет strides, но не копирует данные:
t = arr.T
print(t.shape)   # (3, 2)
print(t.strides) # (8, 24)  -- порядок осей поменялся

# Срезы тоже не копируют:
slice_arr = arr[::2, ::2]  # каждый второй элемент
print(slice_arr.strides)    # shagи кратны исходным

# Проверка владения памятью:
print(t.base is arr)           # True -- транспонирование -- это представление
print(arr.copy().base is None) # True -- копия независима

# Работа с 1D-массивом:
vec = np.arange(12, dtype=np.int32)
print(vec.shape)   # (12,)
print(vec.strides) # (4,)  -- int32 = 4 байта

# reshape без копирования:
mat = vec.reshape(3, 4)
print(mat.shape)   # (3, 4)
print(mat.strides) # (16, 4)  -- 4 * 4 = 16 по строке
print(mat.base is vec)  # True

Атрибуты ndarray: shape, dtype, ndim, size, strides

Каждый массив NumPy хранит метаданные о своей структуре через набор атрибутов. Понимание этих атрибутов необходимо для отладки форм тензоров, работы с памятью и написания производительного кода.

shape

Кортеж целых чисел, описывающий размер каждой оси. Для вектора из 6 элементов shape равен (6,). Для матрицы 3x4 — (3, 4). Для трёхмерного тензора — (2, 3, 4).

dtype

Тип данных каждого элемента. NumPy поддерживает float32, float64, int8, int16, int32, int64, complex128, bool, object и другие. dtype влияет на точность вычислений и потребление памяти.

ndim

Количество осей (измерений). Равно len(arr.shape). Вектор имеет ndim=1, матрица — ndim=2, тензор изображений — ndim=3 или 4.

size

Общее количество элементов. Равно произведению всех чисел в shape. Для массива (2, 3, 4) size=24.

Как strides связаны с производительностью

При C-order (row-major, по умолчанию) последняя ось имеет минимальный stride. При Fortran-order (F-order) — первая. Итерация по строкам в C-order — cache-friendly. Итерация по столбцам — нет. Функции np.ascontiguousarray() и np.asfortranarray() приводят массив к нужному порядку, копируя при необходимости.

import numpy as np

# Проверка contiguous:
arr = np.ones((3, 4), order='C')
print(arr.flags['C_CONTIGUOUS'])  # True
print(arr.flags['F_CONTIGUOUS'])  # False

arr_f = np.ones((3, 4), order='F')
print(arr_f.flags['C_CONTIGUOUS'])  # False
print(arr_f.flags['F_CONTIGUOUS'])  # True

# as_strided для создания произвольных представлений:
from numpy.lib.stride_tricks import as_strided

base = np.arange(10, dtype=np.float32)
# Скользящее окно ширины 3:
window = as_strided(base, shape=(8, 3), strides=(4, 4))
print(window)

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

  • Транспонирование (.T) и срезы возвращают представления, а не копии — изменение одного меняет другое. Всегда проверяйте arr.base или arr.flags['OWNDATA'].
  • as_strided не проверяет выход за границы буфера. Неправильные strides приводят к чтению случайной памяти и трудноуловимым багам.
  • dtype по умолчанию зависит от платформы: np.array([1, 2, 3]) даёт int64 на Linux и int32 на Windows. Указывайте dtype явно в производственном коде.
  • size возвращает число элементов, а не байтовый размер. Байты: arr.nbytes == arr.size * arr.itemsize.
  • reshape возможен без копии только если массив contiguous. Иначе NumPy делает копию молча — проверяйте через np.shares_memory().
  • F-contiguous массивы (Fortran-порядок) часто приходят из MATLAB или R-библиотек. Передача такого массива в C-only функцию даёт неожиданные результаты.
  • shape одномерного массива — (n,), а не (n, 1). Путаница между ними ломает broadcasting и матричные операции.

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

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

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

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

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

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

Источники

  • https://numpy.org/doc/stable/reference/generated/numpy.ndarray.strides.html
←Предыдущий вопросКак работает `np.pad()` и какие режимы дополнения доступны?Следующий вопрос→В чём разница между массивом NumPy и списком Python?

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

NumPydata-aidata-processingperformance-debugging

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

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

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

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