Что означает «a [:, 1]» в нарезке Python

Я читал о нарезке python, но я не смог понять это.

clf.predict_proba(X_test)[:,1]

Затем я попытался проверить себя с помощью простого списка.

a = [2,4,6,7,7,8]

>>> a[:,1]
-----> TypeError: list indices must be integers or slices, not tuple

Этот синтаксис предназначен для нарезки многомерного массива numpy.

Jussi Nurminen 11.12.2020 14:05

Можете ли вы объяснить мне, что происходит в деталях?

martian_rover 11.12.2020 14:06

Посмотрите на это: stackoverflow.com/questions/33491703/meaning-of-x-x-1-in-pyt‌​hon/…

Pasquale 11.12.2020 14:06

Отвечает ли это на ваш вопрос? Значение X = X[:, 1] в Python

Chris 11.12.2020 14:09

Это то же самое, что и array[x,y], где x == slice(None) и y == 1

BallpointBen 11.12.2020 19:20
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
5
3 410
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Существует большая разница при работе с массивами numpy, как результат clf.predict_proba(X_test)[:,1] и list:

Как уже упоминалось в комментариях, списки могут быть разделены одиночными значениями, а не разделены запятыми из-за их структуры, тогда как массив numpy может быть n-мерным, может быть разделен внутри со значением, разделенным запятой, чтобы указать количество строк и столбцы, как это делает pd.DataFrame.iloc[].

np.array([1,1],[2,3],[4,3])

ex_list = [[1,1],[2,3],[4,3]]

Но как это выглядит на самом деле? Что ж, в случае списков они одномерные или flat, а этот массив — нет.

1 arr_example Имеет 3 строки и 2 столбца:

array([[1, 1],
       [2, 3],
       [4, 3]])  

2 ex_list:

[[1,1],[2,3],[4,3]]

Если вы хотите получить доступ к внутреннему значению вложенного списка, то индексирование должно выполняться за пределами первого слайсера, как вы можете видеть в примере ниже:

arr_example[:1,0] # arr_example[rows,columns]
list_example[:1][0][0]

В этом случае в arr_example мы выбираем строки от начала до, но не включая 1 (позиция 1, поэтому только первая строка) и первый столбец (позиция 0). Глядя на структуру данных и понимая, как работает нарезка, можно сделать следующие выводы:

array([1])
1

Итак, вы говорите, если я вас понял, что n-мерная нарезка массива numpy и нарезка кадра данных pandas с использованием loc и iloc выполняются одинаково [:,1]

martian_rover 11.12.2020 14:17

Таким образом, вы указываете, что первое значение указывает количество строк, а второе - количество столбцов, да. Я добавил полное объяснение.

Celius Stingher 11.12.2020 14:18
Ответ принят как подходящий

Хай! @martin a[:,1:] используется, например, для нарезки двумерного массива NumPy.

a = [[1,2,3,4,5], [6,5,3,2,6]]

представлять как

a = [[1, [ 6,
      2,   5,
      3,   3,
      4,   2,
      5    6
      ],     ]] 

чем a[:,1] == a[col[start] : col[end], row[start] : row[end]]

будет [[2,5]] означает взять столбец и строку в 1-м индексе.

Осторожно, @martian_rover! Определение, которое вы используете, - это не массив numpy, а вложенный список. Использование нарезки, которую вы предоставили в своем примере, вернет IndexError

Celius Stingher 11.12.2020 14:45

x[:,1] переводится переводчиком на

x.__getitem__((slice(None), 1))

То есть он вызывает метод __getitem__ объекта x, передавая ему (в данном случае) аргумент кортежа. : переводится в slice объект. Это запятая в индексации, которая создает кортеж.

Если x представляет собой пустой массив, индексация с помощью кортежа имеет смысл (в соответствии с собственными правилами). Но, как указывает ваша ошибка, индексация с помощью tuple не работает для списка. Ошибка говорит, что разрешено.

Таким образом, хотя синтаксис python в целом допускает такое индексирование, детали зависят от класса.

Для двумерного массива [:,1] означает выбор второго столбца.

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