Как работает индексация с запятой на plt Python?

Я проходил курс машинного обучения, имея базовые знания о Python, следуя примеру из книги «На пути к науке о данных» о кластеризации K-средних, и есть способ индексации, о котором я не спрашивал профессора во время лекции. Источник Это та часть, где строится график с центроидами, автор использует индексацию, например:

plt.scatter(
    X[y_km == 2, 0], X[y_km == 2, 1],
    s=50, c='lightblue',
    marker='v', edgecolor='black',
    label='cluster 3'
)

Кто-нибудь знает, как это работает?

Я пробовал делать это за пределами plt.scatter, и это не помогает больше, чем то, что я уже знаю.

"Python's plt" не при чем. Вы имеете в виду matplotlib.pyplot? Его часто импортируют как plt, но это не так.

Chris 10.12.2022 02:42

@Chris Да, извините, может быть, я недостаточно ясно выразился, но да, я имел в виду библиотеку matplotlib. Я попытался добавить тег, чтобы сделать его более понятным.

the1819guy 13.12.2022 18:58
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот статья, которая поможет вам лучше понять индексацию ndarray: Индексация на ndarrays

Итак, в вашем примере X есть 2dim ndarray с n строками и 2 столбцами — feature1 и feature2. Простой пример:

x = np.arange(20).reshape(10, 2)

array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15],
       [16, 17],
       [18, 19]])

и простой пример y - список классов:

y = np.array([1, 2] * 5)
array([1, 2, 1, 2, 1, 2, 1, 2, 1, 2])

Предположим, вы хотите получить все строки из массива X, которые соответствуют классу 1. Вы можете просто сделать это, используя логическое индексирование массива следующим образом:

x[y == 1]

array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13],
       [16, 17]])

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

x[y == 1, 0] # all rows of feature1 (0 index) corresponding to class 1

array([ 0,  4,  8, 12, 16])

Итак, здесь y == 1 — все строки, а 0 — индекс интересующего вас столбца.

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

X представляет собой массив из 2 столбцов. Вы можете думать о них как о координатах x и y.
Распечатав первые 10 строк, вы увидите:

print(X[0:10])

[[ 2.60509732  1.22529553]
 [ 0.5323772   3.31338909]
 [ 0.802314    4.38196181]
 [ 0.5285368   4.49723858]
 [ 2.61858548  0.35769791]
 [ 1.59141542  4.90497725]
 [ 1.74265969  5.03846671]
 [ 2.37533328  0.08918564]
 [-2.12133364  2.66447408]
 [ 1.72039618  5.25173192]]

y_km — классификация этих координат.
В примере они классифицируются как 0, 1 или 2.

print(y_km[0:10])

[1 0 0 0 1 0 0 1 2 0]

Но когда у вас есть y_km == 1, они преобразуются в список логических значений.

print((y_km==1)[0:10])

[ True False False False True False False True False False]

Поэтому, когда вы звоните

X[y_km == 1 , 1]

По сути, вы просите выбрать значения y_km, равные 1, и сопоставить их со столбцом 1 массива X. Он захватит только те строки, для которых y_km равно True, и получит только значение из указанного столбца (т.е. 1)



And

X[y_km == 2, 0]

Значения y_km, равные 2, сопоставляются со столбцом 0 массива X.

Таким образом, первое число относится к группе классификации, которую вы хотите собрать, а второе число относится к столбцу массива X, из которого вы хотите получить данные.

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

Похожие вопросы

Как показать «нечеткость» в графике нечеткой кластеризации Python
Получите наиболее распространенное слово в таблице MySQL с помощью Python
Как и когда использовать тип расширения Cython по сравнению со структурой Cython для хранения данных, которые передаются через функции класса
Хук перед фиксацией выдает ошибку при требовании вылупления
Напишите функцию для нахождения максимального значения: 𝑓(𝑥) = 𝑥−5 + sqrt(4−𝑥^2), применяя градиентный спуск: 𝑥&# 119905;+1=𝑥𝑡−𝜂𝑓′(𝑥𝑡)
Объедините несколько категориальных столбцов в один, когда каждая строка имеет только одно значение, отличное от NaN, в Pandas
Замена единиц и нулей в массиве 2D numpy другим массивом?
Как загрузить PDF-файлы с помощью модуля Python request/httpx?
Как установить уже распространяемый пакет Python (wheel) из частного репозитория github?
Передайте файл конфигурации в обучающую программу Sagemaker