предисловие
По прошествии двух месяцев я снова вернулся, в течение которых произошло много-много всего, и у меня тоже были сомнения в себе и своей настойчивости. Однако после упадка вы всегда идете вперед, и жизнь должна продолжаться.Вы можете только подбодрить себя, сказав: «Сюнгуань действительно похож на железо, но теперь я начинаю с нуля». Как раз вовремя, чтобы пойти домой и изолироваться дома, я хочу настроить ежедневное обновление флага. . .
Ранее мы изучили некоторые основы синтаксиса Python, включая основные структуры данных, функции, чтение и запись файлов Pyhton, а также объектно-ориентированный контент Pyhton. Далее мы изучим некоторые распространенные пакеты для интеллектуального анализа данных, из которых NumPy является наиболее важным базовым пакетом для числовых вычислений.
ndarray
ndarray — это эффективный многомерный массив, обеспечивающий удобные арифметические операции на основе массива и гибкие функции вещания Мы можем быстро сгенерировать массив 2*3 следующим образом.
import numpy as np
data = np.random.randn(2, 3)
print(data)
Результат
[[ 0.52828809 0.75873811 -0.81223681]
[ 2.13722235 0.40123476 -0.07276397]]
С помощью описанного выше метода мы можем легко сгенерировать массив 2x3.На самом деле, ndarray — это общий контейнер многомерного массива.Все содержащиеся в нем элементы относятся к одному типу.Мы можем просмотреть размерность массива через его атрибут формы. Через атрибут dtype увидеть его тип данных. Примеры следующие
import numpy as np
data = np.random.randn(2, 3)
print(data.shape)
print(data.dtype)
Результат выглядит следующим образом
(2, 3)
float64
сгенерировать ndarray
Самый простой способ создать ndarray — использовать функцию массива, которая принимает объект произвольной последовательности и создает новый массив NumPy, содержащий переданные данные. Примеры следующие:
import numpy as np
data1 = [1, 2, 3, 4]
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr1 = np.array(data1)
arr2 = np.array(data2)
arr1 = arr1 * 10
arr2 = arr2 + arr1
print(arr1)
print(arr2)
Результат выглядит следующим образом
[10 20 30 40]
[[11 22 33 44]
[15 26 37 48]]
Мы видим, что функция массива преобразует массив в ndarray, а также мы видим, что ndarray упрощает операции с массивами, устраняя множество циклов for.
Мы также можем использовать нули для создания массива из всех нулей, единицы для создания массива из всех единиц и пустые для создания массива без инициализированных значений. код показывает, как показано ниже
import numpy as np
arr1 = np.zeros(10)
arr2 = np.zeros((5, 2))
print(arr1)
print(arr2)
Результат выглядит следующим образом
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]]
Когда мы используем пустое значение для создания массива, нам нужно быть осторожными, иногда оно возвращает неинициализированное мусорное значение.
код показывает, как показано ниже
import numpy as np
arr1 = np.empty(10)
arr2 = np.empty((5, 2))
print(arr1)
print(arr2)
Результат выглядит следующим образом
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[6.95006917e-310 1.29189234e-316]
[5.39246171e-317 5.39246171e-317]
[6.95006798e-310 6.95006795e-310]
[5.39246171e-317 5.39246171e-317]
[5.39247752e-317 6.95006795e-310]]
Базы индексов и срезы
Индексация и нарезка одномерных массивов относительно проста, как нарезка списков в Python.
код показывает, как показано ниже
import numpy as np
arr1 = np.arange(10)
arr2 = arr1[5:8]
print(arr1)
print(arr2)
Следует отметить, что срез массива является представлением исходного массива, а это означает, что данные не копируются, любая модификация представления будет отражена в исходном массиве, причина в том, что для работы с крупномасштабные массивы, поэтому вы можете себе представить, что накладные расходы на копирование массива будут большими.
код показывает, как показано ниже
import numpy as np
arr1 = np.arange(10)
arr1[5:8] = 12
print(arr1)
Результат выглядит следующим образом
[ 0 1 2 3 4 12 12 12 8 9]
Принцип индексации срезов многомерных массивов такой же, как и у одномерных массивов, за исключением того, что элементами срезов одномерных массивов являются числа, а элементами срезов многомерного массива являются одномерные массивы или многомерные массивы.
код показывает, как показано ниже
import numpy as np
arr1 = np.random.randn(3, 3)
print(arr1)
print(arr1[:2])
Результат выглядит следующим образом
[[ 0.60673463 -0.84261761 -0.55674384]
[ 1.49376061 -1.23850612 -0.10686775]
[ 1.3516511 -0.65024839 -1.68451601]]
[[ 0.60673463 -0.84261761 -0.55674384]
[ 1.49376061 -1.23850612 -0.10686775]]
Мы можем положить [0,60673463 -0,84261761 -0,55674384] [1,49376061 -1,23850612 -0,10686775] [ 1,3516511 -0,65024839 -1,68451601] считается тремя элементами, а arr1[:2] должен принимать первые два элемента.
Для многомерных массивов мы также можем выполнять несколько наборов срезов.
код показывает, как показано ниже
import numpy as np
arr1 = np.random.randn(3, 3)
print(arr1)
print(arr1[1:, :2])
Результат выглядит следующим образом
[[ 1.51132511 -0.16890946 -0.78987301]
[ 0.41426026 -0.09105493 1.44744887]
[ 1.79046674 0.27690028 1.31201169]]
[[ 0.41426026 -0.09105493]
[ 1.79046674 0.27690028]]
В срезе массива мы также можем передавать логические значения для достижения более гибких операций, где длина логического массива должна быть такой же, как длина индекса оси массива.
код показывает, как показано ниже
import numpy as np
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4)
print(names == 'Bob')
print(data[names == 'Bob'])
Результат выглядит следующим образом
[ True False False True False False False]
[[ 1.20875931 0.54870492 -0.45572233 -0.58897014]
[-1.42004058 -0.81150623 1.03740228 0.91427144]]
Из приведенных выше результатов мы видим, что индекс массива, переданный в логическом значении, является строкой, которая возвращает true.
Мы также можем сделать несколько наборов срезов массива, передав логическое значение
код показывает, как показано ниже
import numpy as np
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4)
print(names == 'Bob')
print(data[names == 'Bob', :3])
Результат выглядит следующим образом
[ True False False True False False False]
[[ 1.08094968 -0.29838004 0.80950847]
[ 0.10917791 0.79569972 0.47027354]]
Обратите внимание, что ключевые слова Python и и или бесполезны для логических массивов и должны быть заменены на & и |.
Транспонирование и переориентация массивов.
Транспонирование массива может быть достигнуто с помощью T, а внутренний продукт может быть рассчитан с помощью точки
код показывает, как показано ниже
import numpy as np
arr = np.arange(15).reshape((3, 5))
print(arr)
print(arr.T)
print(np.dot(arr, arr.T))
Результат выглядит следующим образом
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[ 0 5 10]
[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]]
[[ 30 80 130]
[ 80 255 430]
[130 430 730]]
ndarray также может изменить ось, передав номер оси через транспонирование
код показывает, как показано ниже
import numpy as np
arr = np.arange(16).reshape((2, 2, 4))
print(arr)
print(arr.transpose(1, 0, 2))
Результат выглядит следующим образом
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
[[[ 0 1 2 3]
[ 8 9 10 11]]
[[ 4 5 6 7]
[12 13 14 15]]]
Наконец
Чем больше сбивает с толку, тем меньше получается. Чтобы получить больше захватывающего контента, вы можете подписаться на официальный аккаунт QStack, использовать самые чистые технологии и получать удовольствие от программирования.