Добро пожаловать в иллюстрированное руководство по предварительным требованиям для Python. Эта прогулка дает исчерпывающий обзор функций языка программирования Python, которые вам необходимо освоить, чтобы начать базовое путешествие по машинному обучению. Это руководство включает списки, кортежи, словари, циклы for, операторы if, NumPy и MatPlotLib.

1. Переменные

В Python мы храним все фрагменты данных - числа, символы, строки и все остальное - как объекты и обращаемся к этим объектам с помощью переменных. В простом случае мы можем присвоить значение переменной с помощью оператора присваивания, который является знаком «равно»:

x = 1
y = 2
z = x + y
print(z)

Обратите внимание, что мы можем сделать присвоение, используя определенные значения - например, присвоение 1 переменной x и 2 переменной y - и мы можем дать значение, относящееся к другим переменным, например, переменной в z как сумме x и y.

2. Коллекции

Коллекции Python позволяют нам размещать несколько объектов данных в одном объекте, к которому мы можем получить доступ или работать с ним. Существует множество встроенных коллекций, и мы обсудим три из них: списки, кортежи и словари. Позже мы представим еще один метод сбора данных с использованием массивов из библиотеки под названием NumPy.

А. Списки

Список содержит последовательность объектов, обычно представленных в квадратных скобках с запятыми между объектами в том порядке, в котором они перечислены ниже:

list = ['A', 'B', 'C', 'D']

Вышеупомянутый список содержит порядок символов. Список, однако, включает в себя предметы для множества объектов:

varied_list = ['a', 2, 'b', 3.14] # a list with elements of char, integer, and float types
nested_list = ['hello', 'Harsh', [1.618, 42]] # a list within a list!

Списки допускают так называемую индексацию, при которой можно найти определенный элемент списка. Например, предположим, что вы хотите захватить второй элемент varied_list выше.

second_element = varied_list[1]
print(second_element)

Python - это так называемый язык программирования с нулевой индексацией. Это просто означает, что «первый» элемент в списке или другом наборе данных отображается с использованием «0» (ноль), а не «1». Вот почему выше мы захватили второй элемент varied_list, используя полный индекс «1» вместо «2», как некоторые могли бы ожидать в одном справочном языке (таком как Matlab).

Еще одна особенность индексации Python, облегчающая использование отрицательной индексации. Как мы обсуждали выше, «первый» элемент списка Python обозначается индексом «0»; поэтому, вероятно, естественно видеть, что последний элемент в списке проиндексирован «-1». См. Следующие примеры отрицательной индексации:

last_element = list[-1] #to print the last element of list
print(last_element)
last_element_2 = list[len(list)-1] #to print also the last element of list
print(last_element_2)
second_to_last_element = list[-2] #to print second to last element of list
print(second_to_last_element)

Подобно индексации - это нарезка списка, когда можно добраться до объединяемого раздела списка. Двоеточие (:) используется для создания фрагмента с числами, которые описывают позиции, которые должны начинать и заканчивать фрагмент. Ниже мы показываем, что начало или конец значения кусок можно опустить, когда человек выполняет срез с начала или конца списка. Также обратите внимание на то, что направляющая начала слайда включена в деталь, но индикатор конца слайда не включен.

NFL_list = ["Charger", "Bronco", "Raider", "Chief", "Panther", "Falcon", "Cowboy", "Eagle"]
AFC_west_list = NFL_list[:4] # Slice to grab list indices 0, 1, 2, 3 -- "Charger", "Bronco", "Raider", "Chief"
print(AFC_west_list)
NFC_south_list = NFL_list[4:6] # Slice list indices 4, 5 -- "Panther", "Falcon"
print(NFC_south_list)
NFC_east_list = NFL_list[6:] # Slice list indices 6, 7 -- "Cowboy", "Eagle"
print(NFC_east_list)

Б. Кортежи

Кортеж - это коллекция Python, которая очень похожа на список с некоторыми небольшими отличиями. Для начала, кортежи отображаются в круглых скобках вместо квадратных:

x = 2
y = 3
coordinates = (x, y)

Приведенные выше динамические координаты - это кортеж, содержащий переменные x и y. Этот пример был выбран, чтобы еще раз показать различия между общим использованием кортежей и списком. В то время как списки часто используются для содержания элементов с одинаковым значением в некотором смысле, кортежи часто используются для содержания соответствующего атрибута модуля. Например, как указано выше, имеет смысл рассматривать точечные ссылки как единое целое. В качестве другого примера рассмотрим следующий кортеж и список дат:

year1 = 2022
month1 = "May"
day1 = 15
date1 = (month1, day1, year1)
year2 = 2021
month2 = "June"
day2 = 17
date2 = (month2, day2, year2)
years_list = [year1, year2]

Обратите внимание, что мы собрали атрибуты одной даты в один кортеж: все эти фрагменты информации определяют одну «единицу». Напротив, в списке лет мы собрали разные годы во фрагменте кода: значения списка одинаковы (они оба года), но они не определяют одну и ту же единицу.

Разница, которую я рисую между кортежами и списком здесь, заключается в том, что делают большинство программистов Python, но не в той, которая строго соблюдается (т.е. вы не обнаружите ошибок, если сломаете эту сборку!). Еще одна тонкая вариация кортежей и списков включает в себя так называемую изменчивость переменных Python. Изменчивость настолько сложна, что нам не нужно обсуждать ее в нашем руководстве по Python, но заинтересованным людям предлагается прочитать его, если они того пожелают!

С. Словари

Теперь, когда вы увидели круглые скобки (для кортежа) и квадратные скобки (для списков), вам может быть интересно, для чего используются фигурные скобки. Ответ: Словари Python. Описательная особенность словаря Python состоит в том, что в нем есть ключи и связанные значения. При определении словаря эта организация может быть достигнута с помощью цвета (:), как показано ниже:

book_dictionary = {"Title": "Ulysses", "Author": "James Joyce", "Year": 1818}
print(book_dictionary["Author"])

Кроме того, ключами book_dictionary являются «Заголовок», «Автор» и «Год», и каждый из этих ключей имеет соответствующее значение. Обратите внимание, что пары ключ-значение разделяются запятыми. Использование ключей позволяет нам получить доступ к словарному клипу по имени, вместо того, чтобы знать индекс нужного нам отрывка, как в случае со списками и кортежами. Например, выше мы можем найти автора Улисса, использующего ключ «Автор» вместо индекса. Фактически, в отличие от списка или кортежа, порядок элементов в словаре не имеет значения, и словари не могут быть идентифицированы с помощью чисел, что мы видим ниже, когда мы пытаемся достичь второго элемента в словаре, используя целое число:

print(book_dictionary[1])

3. Поток управления

Как и многие популярные языки программирования, Python предлагает несколько способов управления потоком выполнения в системе. Здесь мы представим циклические и условные операторы.

А пока важно сообщить вам об уникальной особенности языка Python: отступах. В то время как такой язык, как C, использует фигурные скобки для содержания операторов кода внутри циклов или условных выражений, Python отображает эти операторы с отступом. Эта функция обеспечивает удобочитаемость кода Python, как вы увидите в примерах ниже.

А. For-Loops

Операторы цикла позволяют многократно выполнять код. Например, предположим, что мы хотим сложить все числа от нуля (0) до десяти (10), не считая десяти. Да, мы можем сделать это в одной строке, но мы также можем использовать цикл для добавления одного значения за раз. Ниже приведен простой код ссылки, который сопровождает:

sum = 0
for i in range(10):
    sum = sum + i
print(sum)
alternative_sum = 0+1+2+3+4+5+6+7+8+9
print(alternative_sum==sum)

Встроенная функция range () создает последовательность значений, которые мы перебираем в цикле, и обратите внимание, что диапазон (10) не включает в себя 10. Помимо перебора чисел с помощью функции range (), мы также можем сортировать элементы в списке, как показано ниже:

ingredients = ["flour", "sugar", "eggs", "oil", "soda"]
for ingredient in ingredients:
print(ingredient)

Кроме того, цикл for запускается поверх списка ингредиентов, и внутри каждый цикл этих элементов называется ингредиентом. Использование существительных в единственном и множественном числе для управления этой итерацией является стандартным мотивом Python, но вам не нужно использовать его в своей программе.

Б. Условные выражения

Обычно при создании Программы нужно выполнять только определенные части кода, в которых выполняются определенные условия, например, когда переменная имеет определенное значение. Это достигается с помощью условных операторов: if, elif, else.

for i in range(10):
    if i % 2 == 0: # % -- modulus operator -- returns the remainder after division
        print("{} is even".format(i))
    else:
        print("{} is odd".format(i))

# Example of elif 
# Print the meteorological season for each month 
print("In the Northern Hemisphere: \n")
month_integer = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] # i.e., January is 1, February is 2, etc...
for month in month_integer:
    if month < 3:
        print("Month {} is in Winter".format(month))
    elif month < 6:
        print("Month {} is in Spring".format(month))
    elif month < 9:
        print("Month {} is in Summer".format(month))
    elif month < 12:
        print("Month {} is in Fall".format(month))
    else: # This will put 12 (i.e., December) into Winter
        print("Month {} is in Winter".format(month))

4. Понимание списка

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

even_list = [2, 4, 6, 8]
odd_list = [even+1 for even in even_list]
print(odd_list)

Обратите внимание на сходство между пониманием компенсации списка и цикла for; В Python есть компенсация списком в виде компактного «питонического» метода для выполнения задач, которые могут выполняться в цикле.

5. Библиотека NumPy

Библиотека NumPy предлагает Python широкий спектр научных вычислительных навыков. Центральным элементом этого является объект Array, который предлагает другой способ упорядочивания значений одного и того же типа. Макеты Numpy позволяют вырезать и индексировать аналогично спискам. Что наиболее важно, Numpy имеет огромное количество математических функций, которые могут преобразовывать массивы и выполнять вычисления между массивами. Для тех, кто знаком с MatLab, эти действия должны напоминать множественные матричные функции.

import numpy as np
x = np.array([2, 4, 6]) # create a rank 1 array
A = np.array([[1, 2, 3], [4, 5, 6]]) # create a rank 2 array
B = np.array([[1, 2, 3], [4, 5, 6]])
print("Matrix A: \n")
print(A)
print("\nMatrix B: \n")
print(B)

# Indexing/Slicing examples
print(A[0, :]) # index the first "row" and all columns
print(A[1, 2]) # index the second row, third column entry
print(A[:, 1]) # index entire second column

# Arithmetic Examples
C = A * 2 # multiplies every elemnt of A by two
D = A * B # elementwise multiplication rather than matrix multiplication
E = np.transpose(B)
F = np.matmul(A, E) # performs matrix multiplication -- could also use np.dot()
G = np.matmul(A, x) # performs matrix-vector multiplication -- again could also use np.dot()
print("\n Matrix E (the transpose of B): \n")
print(E)
print("\n Matrix F (result of matrix multiplication A x E): \n")
print(F)
print("\n Matrix G (result of matrix-vector multiplication A*x): \n")
print(G)

# Broadcasting Examples
H = A * x # "broadcasts" x for element-wise multiplication with the rows of A
print(H)
J = B + x # broadcasts for addition, again across rows
print(J)

# max operation examples
X = np.array([[3, 9, 4], [10, 2, 7], [5, 11, 8]])
all_max = np.max(X) # gets the maximum value of matrix X
column_max = np.max(X, axis=0) # gets the maximum in each column -- returns a rank-1 array [10, 11, 8]
row_max = np.max(X, axis=1) # gets the maximum in each row -- returns a rank-1 array [9, 10, 11]
# In addition to max, can similarly do min. Numpy also has argmax to return indices of maximal values
column_argmax = np.argmax(X, axis=0) # note that the "index" here is actually the row the maximum occurs for each column
print("Matrix X: \n")
print(X)
print("\n Maximum value in X: \n")
print(all_max)
print("\n Column-wise max of X: \n")
print(column_max)
print("\n Indices of column max: \n")
print(column_argmax)
print("\n Row-wise max of X: \n")
print(row_max)

# Sum operation examples
# These work similarly to the max operations -- use the axis argument to denote if summing over rows or columns
total_sum = np.sum(X)
column_sum = np.sum(X, axis=0)
row_sum = np.sum(X, axis=1)
print("Matrix X: \n")
print(X)
print("\n Sum over all elements of X: \n")
print(total_sum)
print("\n Column-wise sum of X: \n")
print(column_sum)
print("\n Row-wise sum of X: \n")
print(row_sum)

# Matrix reshaping
X = np.arange(16) # makes a rank-1 array of integers from 0 to 15
X_square = np.reshape(X, (4, 4)) # reshape X into a 4 x 4 matrix
X_rank_3 = np.reshape(X, (2, 2, 4)) # reshape X to be 2 x 2 x 4 --a rank-3 array
                                    # consider as two rank-2 arrays with 2 rows and 4 columns
print("Rank-1 array X: \n")
print(X)
print("\n Reshaped into a square matrix: \n")
print(X_square)
print("\n Reshaped into a rank-3 array with dimensions 2 x 2 x 4: \n")
print(X_rank_3)

6. Графика

Большая часть построения графиков, которые вы будете выполнять, будет в библиотеке Matplotlib, особенно в модуле pyplot. Правильно названная функция построения графика используется для редактирования двухмерных данных, как показано ниже:

import numpy as np
import matplotlib.pyplot as plt
# let’s start with parabola
# Compute the parabola’s x and y coordinates
x = np.arange(-4, 4, 0.1)
y = np.square(x)
# matplotlib for the plot
plt.plot(x, y, ‘b’) # color blue for the line
plt.xlabel(‘X-Axis Values’)
plt.ylabel(‘Y-Axis Values’)
plt.title(‘First Plot: A Parabola’)
plt.show() # display the plot

Еще одна функция Matplotlib, с которой вы столкнетесь, - это imshow, используемый для отображения изображений. Помните, что изображение можно рассматривать как массив, элементы которого показывают значения пикселей изображения. В качестве простого примера приведем единичную матрицу:

import numpy as np
import matplotlib.pyplot as plt
X = np.identity(5)
identity_matrix_image = plt.imshow(X, cmap=”Greys_r”)
plt.show()

# plotting a random matrix, with a different colormap
A = np.random.randn(5, 5)
random_matrix_image = plt.imshow(A)
plt.show()

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

Вот краткое изложение вашего сегодняшнего достижения:

  1. Переменные
  2. Коллекции: списки, кортежи, словари
  3. Циклы управления: циклы For, условия if-elif-else
  4. Перечислить компенсацию
  5. Numpy
  6. Графика

Уровень кодирования

Спасибо, что стали частью нашего сообщества! Подпишитесь на наш канал YouTube или присоединитесь к Интервью по программированию Skilled.dev.