Могу ли я разрезать список, как numpy?

Если я использую numpy, я могу разрезать массив следующим образом:

import numpy as np

A = np.asarray([1, 2, 3, 4, 5])
print(A[np.asarray([1, 3])])

Тогда на выходе получается [2 4]. Интересно, могу ли я выполнить ту же операцию без использования numpy, когда А - это просто список.

.... A[[1,3]]?

Divakar 04.10.2018 09:51

@Divakar Извините за недоразумение. Я отредактировал вопрос, чтобы указать, что A - это список.

hopflink 04.10.2018 09:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
221
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете сделать это, набрав немного больше текста, используя понимание списка:

print([A[n] for n in [1, 3]])

Спасибо, это будет хороший способ. Насколько быстро составлен список? Интересно, какой из них быстрее между вашим и numpy.

hopflink 04.10.2018 09:54

Понимание списков происходит быстро - намного быстрее, чем, например, добавление элементов в список по одному. Действительно ли использовать списки numpy или обычные, действительно зависит от вашего варианта использования, а не от этой единственной детали синтаксиса. Вам нужно будет измерить производительность самостоятельно, однозначного ответа нет.

alexis 04.10.2018 09:56

@alexis Я бы не сказал «намного быстрее», но «немного быстрее». Не на порядки быстрее, как массив numpy

juanpa.arrivillaga 04.10.2018 10:14

@ juanpa.arrivillaga Не могли бы вы уточнить, что вы имеете в виду, говоря «как массив из numpy»?

hopflink 04.10.2018 10:29

Я думаю, это означает, что если вы можете использовать numpy, он в целом будет быстрее, чем списки Python. В этом вся цель numpy.

alexis 04.10.2018 10:30

Не говоря уже о numpy, вы уверены в этом @juanpa? По моему опыту, такой цикл, как for x in list_a: list_b.append(x), более чем незначительно медленнее, чем понимание.

alexis 04.10.2018 10:34

Вот что я имею в виду точно: gist.github.com/juanarrivillaga/… настолько "маргинальный", как в случае меньше, чем numpy, например, вы все еще используете те же единицы времени. И чем сложнее становится то, что вы делаете внутри понимания списка, различия резко сокращаются. По сути, понимание списков оптимизирует добавление.

juanpa.arrivillaga 04.10.2018 10:35

Обратите внимание: я обновил суть дополнительным примером, показывающим, как для небольших списков различия практически исчезли, потому что понимание списка создает объект функции под капотом, который имеет некоторые накладные расходы.

juanpa.arrivillaga 04.10.2018 10:41

@juanpa, спасибо за демонстрацию. Я признаю, что разница меньше, чем я ожидал, но для небольших наборов данных все это не имеет значения - имеют значение только большие списки (а 1000 элементов - это скорее низкая сторона «большого»). Конечно, разница исчезает, когда вы делаете набор тестов настолько маленьким - то, что тестируется, займет лишь часть общего времени.

alexis 04.10.2018 13:32

К сожалению, нет. Вы можете кусочек чистый список Python. Однако это не нарезка. Если вы попробуете это в списке, вы получите

TypeError: list indices must be integers or slices, not list

Это поддерживается массивами numpy, потому что они имеют другую реализацию метода __get__. Вы ничего не можете с этим поделать, кроме как самостоятельно создать подкласс класса list (чего на самом деле не следует, реализация numpy оптимизирована для таких операций).

Другие вопросы по теме