Хобрук: Ваш путь к мастерству в программировании

Почему массив numpy возвращает исходный массив при передаче массива в качестве индекса?

Я считаю такое поведение полным бредом. Это происходит только с массивами numpy, типичные массивы Python просто выдают ошибку.

Создадим два массива:

randomNumMatrix = np.random.randint(0,20,(3,3,3), dtype=np.int)
randRow = np.array([0,1,2], dtype=np.int)

Если мы передаем массив как индекс, чтобы получить что-то из другого массива, возвращается исходный массив.

randomNumMatrix[randRow]

Приведенный выше код возвращает эквивалент randomNumMatrix. Я нахожу это неинтуитивным. Я бы ожидал, что это не сработает или, по крайней мере, вернет эквивалент

randomNumMatrix[randRow[0]][randRow[1]][randRow[2]].  

Дополнительные наблюдения:

A) Приведенный ниже код не работает, он выдает эту ошибку: IndexError: индекс 3 выходит за пределы оси 0 с размером 3.

randRow = np.array([0, 1, 3], dtype=np.int)

Б) К моему удивлению, приведенный ниже код работает:

randRow = np.array([0, 1, 2, 2,0,1,2], dtype=np.int)

Может кто-нибудь объяснить, в чем преимущества этой функции? На мой взгляд, это только создает большую путаницу.


  • Таким образом, вы можете быстро извлечь определенные строки/столбцы из массива. Со списком python вы можете сделать это с помощью списков, но это слишком много стандартного кода и накладных расходов на создание объектов для numpy, где эта операция очень распространена. 23.05.2020
  • numpy.org/devdocs/reference/ 23.05.2020
  • Отвечает ли это на ваш вопрос? функция или ошибка расширенного индексирования numpy? 23.05.2020

Ответы:


1

Что такое?

randomNumMatrix[randRow[0]][randRow[1]][randRow[2]]

Это не действительный Python.

В numpy есть разница между

arr[(x,y,z)]     # equivalent to arr[x,y,z]

а также

arr[np.array([x,y,z])]     # equivalent to arr[np.array([x,y,z]),:,:]

Кортеж предоставляет скалярный индекс для каждого измерения. Массив (или список) предоставляет несколько индексов для одного измерения.

Возможно, вам придется изучить документацию numpy по индексации, особенно по расширенной индексации.

23.05.2020
Новые материалы

React on Rails
Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

Что такое гибкие методологии разработки программного обеспечения
Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

Ториго  — революция в игре Го
Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

Математика и интуиция - Часть 1
У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..