NumPy Super Detailed Tutorial (1): Массивы NumPy

NumPy

Адрес статьи серии


NumpyдаPythonОсновная библиотека китайских научных вычислений,NumPyСлово происходит отNumericalиPythonдва слова. Он предоставляет высокопроизводительный объект многомерного массива, а также большое количество библиотечных функций и операций, которые могут помочь программистам легко выполнять численные вычисления, и широко используются в моделях машинного обучения, обработке изображений и компьютерной графике, математических задачах. и другие поля.

Массив Numpy: ndarray

NumPyСамый важный объект, определенный в, называетсяndarrayизNтип размерного массива, который является описаниемтого же типаколлекция элементов.ndarrayКаждый элемент является объектом типа данных object (dtype).ndarrayКаждый элемент использует в памяти блок одинакового размера.

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
параметр описывать
object Любой объект, который предоставляет методы интерфейса Array
dtype тип данных
copy Если True, объект объекта копируется, иначе только если__array__Возвращает копию, которая создается только в том случае, если объект является вложенной последовательностью или когда копия требуется для удовлетворения каких-либо других требований (тип dtype, порядок и т. д.).
order Определяет структуру памяти массива. Если объект не является массивом, вновь созданный массив будет расположен в строках (C) или столбцах, если указано (F). Если объект является массивом, выполняется следующее. C (по строке), F (по столбцу), A (исходный порядок), K (порядок, в котором элементы появляются в памяти)
subok По умолчанию возвращаемый массив приводится к массиву базового класса. Если True, возвращается подкласс.
ndmin Возвращает минимальный размер массива

Пример 1: Самый простой пример

import numpy as np

a = [1, 2, 3]
b = np.array(a)

print(b)
print(type(b))

вывод:

[1 2 3]
<class 'numpy.ndarray'>

Уведомление:listпечать показывает да[1, 2, 3]ndarrayпечать показывает да[1 2 3], без запятых.

Пример 2: Пример использования параметра dtype NumPyКоэффициент поддержкиPythonБолее широкий выбор числовых типов

import numpy as np

a = [1, 2, 3]
b = np.array(a, dtype=np.float_)
# 或者
b = np.array(a, dtype=float)

print(b)
print(b.dtype)
print(type(b[0]))

вывод:

[1. 2. 3.]
float64
<class 'numpy.float64'>

Пример 3: Использование параметра копирования

import numpy as np

a = np.array([1, 2, 3])
b = np.array(a, copy=True)
a[0] = 0

print(a)
print(b)

вывод:

[0 2 3]
[1 2 3]

можно увидетьaиbЗначение отличается, что указывает на то, чтоbдаaКопия двух разных объектов.

import numpy as np

a = np.array([1, 2, 3])
b = np.array(a, copy=False)
a[0] = 0

print(a)
print(b)

вывод:

[0 2 3]
[0 2 3]

aвызванное изменениеbизменения, указываяaиbуказывает на один и тот же объект.

Пример 4: Пример использования параметра ndmin

import numpy as np

a = [1, 2, 3]
b = np.array(a, ndmin=2)

print(b)

вывод:

[[1 2 3]]

Вы можете видеть, что результатом стал двумерный массив.

Пример 5: Пример использования параметра subok

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

import numpy as np

a = np.matrix('1 2 7; 3 4 8; 5 6 9')
print(type(a))
print(a)
at = np.array(a, subok=True)
af = np.array(a, subok=False)
print(type(at))
print(type(af))

вывод:

<class 'numpy.matrix'>
[[1 2 7]
 [3 4 8]
 [5 6 9]]
<class 'numpy.matrix'>
<class 'numpy.ndarray'>

Свойства массива NumPy

NumPyРазмерность (ака размерность) массива называется рангом (rank), одномерный массив имеет ранг 1, двумерный массив имеет ранг 2 и так далее.NumPy, каждый линейный массив называется осью (axis), что является размерностью (dimensions).

Атрибуты инструкция
ndarray.ndim ранг, то есть количество осей или количество измерений
ndarray.shape размеры массива для матриц, n строк и m столбцов
ndarray.size Общее количество элементов массива, эквивалентное значению n*m в .shape.
ndarray.dtype тип элемента объекта ndarray
ndarray.itemsize размер каждого элемента в объекте ndarray в байтах
ndarray.flags информация о памяти для объектов ndarray
ndarray.real действительная часть элементов ndarray (действительная часть комплексных чисел)
ndarray.imag мнимая часть элементов ndarray (мнимая часть комплексных чисел)
ndarray.data Буфер, содержащий фактические элементы массива, так как элементы обычно получаются по индексу массива, это свойство обычно не требуется.

1. ndarray.shape

Возвращает кортеж, содержащий размеры массива, n строк и m столбцов для матриц, которые также можно использовать для настройки размеров массива.Пример 1:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)

вывод:

(2, 3)

Пример 2:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
a.shape = (3, 2)
print(a)

вывод:

[[1 2]
 [3 4]
 [5 6]]

Пример третий: NumPyтакже обеспечиваетreshape()Функция для настройки размеров массива. Толькоreshape()Возвращает копию с измененным размером без изменения оригиналаndarray.

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape(3, 2)
print(b)  # a 没变

вывод:

[[1 2]
 [3 4]
 [5 6]]

2. ндаррай.ндим

Возвращает размерность массива (ранг).Пример 1:

import numpy as np

a = np.arange(24)
print(a.ndim)

# 现在调整其大小
b = a.reshape(2, 4, 3)
print(b.ndim)

вывод:

1
3

3. ndarray.flags

ndarray.flagsвозвращениеndarrayИнформация о памяти объекта, включая следующие свойства:

Атрибуты описывать
C_CONTIGUOUS Данные находятся в одном непрерывном сегменте в стиле C
F_CONTIGUOUS Данные находятся в одном непрерывном сегменте в стиле Fortran.
OWNDATA Массив владеет памятью, которую он использует, или заимствует ее у другого объекта.
WRITEABLE Область данных может быть записана, установите для этого значения значение False, данные доступны только для чтения.
ALIGNED Данные и все элементы должным образом согласованы с оборудованием
WRITEBACKIFCOPY UPDATEIFCOPY устарел, заменен WRITEBACKIFCOPY;
UPDATEIFCOPY Этот массив является копией другого массива, и при освобождении этого массива содержимое исходного массива будет обновлено.
import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.flags)

вывод:

C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False

4. ndarray.real

import numpy as np

x = np.sqrt([1+0j, 0+1j])
print(x)
print(x.real)
print(x.real.dtype)

вывод:

[1.        +0.j         0.70710678+0.70710678j]
[1.         0.70710678]
float64

Константы в NumPy

  • Положительная бесконечность: Inf = inf = infty = Infinity = PINF
  • Отрицательная бесконечность: NINF
  • Положительный ноль: PZERO
  • Отрицательный ноль: NZERO
  • Нечисловой: нан = NaN = NAN
  • Натуральное число е: е
  • пи: пи
  • Гамма: euler_gamma
  • Псевдоним для None: newaxis

Пример:

print(np.inf)
print(np.NINF)
print(np.PZERO)
print(np.NZERO)
print(np.nan)
print(np.e)
print(np.pi)
print(np.euler_gamma)
print(np.newaxis)

вывод:

inf
-inf
0.0
-0.0
nan
2.718281828459045
3.141592653589793
0.5772156649015329
None

NumPy создает массив

1. пустой.пустой

Этот метод используется для создания неинициализированного массива указанного размера (формы) и типа данных (dtype).

numpy.empty(shape, dtype=float, order='C')
параметр описывать
shape кортеж, представляющий размеры массива
dtype тип данных
order Есть два варианта "C" и "F"

Пример:

import numpy as np

x = np.empty([3, 2], dtype=int)
print(x)

вывод:

[[         0 1072693248]
 [         0 1072693248]
 [         0 1072693248]]

empty()Методы иzeros()Этот метод отличается и не устанавливает значение массива в ноль, поэтому он может быть немного быстрее. С другой стороны, он требует, чтобы пользователь вручную установил все значения в массиве, и его следует использовать с осторожностью.

2. numpy.нули

Создает новый массив указанного размера, заполненный нулями.

numpy.zeros(shape, dtype=float, order='C')

Пример:

import numpy as np

x = np.zeros(5)
print(x)

вывод:

[0. 0. 0. 0. 0.]

Примечание: по умолчанию используется тип float.

3. numpy.ones

Создает новый массив указанной размерности, заполненный единицами.

numpy.ones(shape, dtype=float, order='C')

Пример:

import numpy as np

x = np.ones(5)
print(x)

вывод:

[1. 1. 1. 1. 1.]

4. numpy.full

Возвращает новый массив фиксированной размерности и типов, заполняющий Fill_Value.

numpy.full(shape, fill_value, dtype=None, order='C')
параметр описывать
shape Возвращает размеры массива
fill_value значение заполнения
dtype Тип данных возвращаемого массива, значение по умолчанию None означает:np.array(fill_value).dtype
order Порядок элементов хранения в памяти компьютера поддерживается только «C» (по строке), «F» (по столбцу), по умолчанию «C».

Пример:

import numpy as np

a = np.full((2, 3), 9)
print(a)

вывод:

[[9 9 9]
 [9 9 9]]

NumPy создает массив из диапазона значений

1. numpy.arange

Эта функция эквивалентнаPythonвстроенныйrangeфункция, но возвращаетndarrayНе список.

arange([start,] stop[, step,], dtype=None)

Скобки [ ] обозначают необязательные параметры.

параметр описывать
start начальное значение, по умолчанию 0
stop Значение завершения (эксклюзивное)
step размер шага, по умолчанию 1
dtype Тип данных NDARRAY создает, если он не указан, будет использоваться тип входных данных.

Пример:

import numpy as np

a = np.arange(5)
b = np.arange(10, 20, 2)
print(a)
print(b)

вывод:

[0 1 2 3 4]
[10 12 14 16 18]

2. numpy.linspace

Создайте массив одномерных арифметических прогрессий сarangeфункция другая,arange- фиксированный размер шага, иlinspaceявляется фиксированным числом элементов.

linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
параметр описывать
start начальное значение последовательности
stop Конечное значение последовательности, если конечная точка имеет значение True, значение включается в последовательность
num Количество равношаговых выборок для генерации, по умолчанию 50.
endpoint Когда значение равно True, значение остановки включается в последовательность, в противном случае оно не включается, и по умолчанию используется значение True.
retstep Если True, интервал будет отображаться в результирующем массиве, иначе он не будет отображаться.
dtype Тип данных NDARRAY

Пример 1: Использование параметра конечной точки

Я намеренно выбрал следующий неисчерпаемый пример, чтобы показатьendpointЭффект. можно увидеть,endpoint=Falseзначениеendpoint=Truenum = num + 1Результат удаляет значение завершения. Это немного сложно, сравните следующий примерnumЗначения параметров и выведите результаты, чтобы понять.

import numpy as np

a = np.linspace(0, 5, 3, endpoint=False)
b = np.linspace(0, 5, 4, endpoint=True)

print(a)
print(b)

вывод:

[0.         1.66666667 3.33333333]
[0.         1.66666667 3.33333333 5.        ]

Пример 2: Использование параметра retstep

Возвращает кортеж, в котором первый элементnumpy.ndarray, а второй элемент — размер шага.

import numpy as np

a = np.linspace(0, 10, 5, retstep=True)
print(a)

вывод:

(array([ 0. ,  2.5,  5. ,  7.5, 10. ]), 2.5)

Пример 3: параметр dtype

dtypeПосле указания параметра результат будет преобразован вdtypeУказанный тип, если он является числом с плавающей запятой, конечное значение может не совпадать.

import numpy as np

a = np.linspace(0, 10, 5, dtype=int)
print(a)

вывод:

[ 0  2  5  7 10]

3. numpy.logspace

numpy.logspaceФункция используется для создания пропорционального ряда.

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
параметр описывать
start Начальное значение последовательности:base ** start(возведение в степень)
stop Завершающее значение последовательности:base ** stop. Если конечная точка имеет значение True, значение включается в массив
num Количество образцов одинакового шага для генерации, по умолчанию 50
endpoint Когда значение равно True, значение остановки включается в последовательность, в противном случае оно не включается, и по умолчанию используется значение True.
base Основание логарифмического логарифма.
dtype тип данных ndarray

Пример:

На самом деле это нехорошо, в основном обратите внимание на то, что значение начального параметра не является реальным начальным значением.

import numpy as np

a = np.logspace(1, 4, num=4)
print(a)

вывод:

[   10.   100.  1000. 10000.]

4. numpy.geomspace

Создайте одномерную пропорциональную последовательность.

numpy.geomspace(start, stop, num=50, endpoint=True, dtype=None, axis=0)
параметр описывать
start начальное значение последовательности
stop Конечное значение последовательности, если конечная точка имеет значение True, это значение включается в последовательность.
num Количество сэмплов для генерации, по умолчанию 50
endpoint Когда значение равно True, значение остановки включается в последовательность, в противном случае оно не включается, и по умолчанию используется значение True.
dtype тип данных ndarray
axis Новая функция в версии 1.16.0,не пойму как ей пользоваться.На официальном сайте даже примера нет.При значении 0 и -1 результат тот же,и сообщает об ошибке в другие времена.

Пример:

import numpy as np

a = np.geomspace(1, 8, num=4)
print(a)

вывод:

[1. 2. 4. 8.]

NumPy создает массив из существующего массива

1. numpy.asarray

numpy.asarrayпохожийnumpy.array,ноnumpy.asarrayВсего три параметра.

numpy.asarray(a, dtype=None, order=None)
параметр описывать
a Входные данные могут быть преобразованы в любую форму массива. Сюда входят списки, списки кортежей, кортежи, кортежи кортежей, кортежи списков и ndarrays.
dtype тип данных
order Порядок элементов хранения в памяти компьютера поддерживается только «C» (по строке), «F» (по столбцу), по умолчанию «C».

Пример:

import numpy as np

a = np.asarray([1, 2, 3])
print(a)

вывод:

[1 2 3]

2. numpy.frombuffer

numpy.frombufferИспользуется для реализации динамических массивов.numpy.frombufferПринимает входной параметр буфера, считывает его в виде потока и преобразует в объект ndarray.

numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)
параметр описывать
buffer Достигнуто__buffer__Объект метода (определенно не любой объект, упомянутый в учебнике для новичков)
dtype Тип данных возвращаемого массива
count Количество данных для чтения, по умолчанию -1, читать все данные.
offset Начальная позиция чтения, по умолчанию 0.

Пример 1:Буфер - это строка,Python3Строка по умолчанию имеет тип Unicode, поэтому для преобразования в строку байтов добавьте b перед исходной строкой.

import numpy as np

a = np.frombuffer(b'Hello World', dtype='S1')
print(a)

вывод:

[b'H' b'e' b'l' b'l' b'o' b' ' b'W' b'o' b'r' b'l' b'd']

Пример 2:Глядя на приведенный выше пример, кажется, что я не особо разбираюсь в "реализации динамических массивов", поэтому давайте рассмотрим этот пример.

import numpy as np
import array

a = array.array('i', [1, 2, 3, 4])
print(a)

na = np.frombuffer(a, dtype=np.int_)
print(na)

a[0] = 10
print(a)
print(na)

вывод:

array('i', [1, 2, 3, 4])
[1 2 3 4]
array('i', [10, 2, 3, 4])
[10  2  3  4]

array.arrayПамять созданного объекта массива является непрерывной (здесь нельзя использовать список, он сообщит: AttributeError: 'list' объект не имеет атрибута'__buffer__'),numpy.frombufferотarray.arrayМассив создается в памяти , как видно из вышеприведенного примера, меняяarray.arrayзначение ,numpy.frombufferЗначение также изменится соответственно, что можно увидеть.

Пример третий:

array.arrayМожно изменить значение в массиве, но не в том случае, если оно добавляет значение.

import numpy as np
import array

a = array.array("i", [1, 2, 3, 4])
na = np.frombuffer(a, dtype=int)
print(na)

a.append(5)
print(na)

вывод:

[1 2 3 4]
[140896288       381         3         4]

3. numpy.fromiter

numpy.fromiterМетод строит объект ndarray из итерируемого объекта и возвращает одномерный массив.

numpy.fromiter(iterable, dtype, count=-1)
параметр описывать
iterable повторяемый объект
dtype Тип данных возвращаемого массива
count Количество данных для чтения, по умолчанию -1, прочитать все данные

Пример 1:

import numpy as np

iterable = (x * x for x in range(5))
a = np.fromiter(iterable, int)
print(a)

вывод:

[ 0  1  4  9 16]

немного похожеnumpy.array,arrayМетод должен передаваться в списке, иfromiterМожно передавать итерируемые объекты.

Пример 2:Замените приведенный выше пример наarrayПопробуйте.

import numpy as np

iterable = (x * x for x in range(5))
a = np.array(iterable)
print(a)

вывод:

<generator object <genexpr> at 0x000000001442DD00>

4. пустой_лайк

Возвращает массив тех же размеров и типа, что и заданный массивнеинициализированныйновый массив.

numpy.empty_like(prototype, dtype=None, order='K', subok=True)
параметр описывать
prototype данный массив
dtype Переопределите тип данных результата, Новый в версии 1.6.0.
order Определяет структуру памяти массива. C (по строке), F (по столбцу), A (исходный порядок), K (порядок, в котором элементы появляются в памяти)
subok По умолчанию возвращаемый массив приводится к массиву базового класса. Если True, возвращается подкласс.

Пример:

import numpy as np
a = np.empty_like([[1, 2, 3], [4, 5, 6]])
print(a)

вывод:*

[[870   0   0]
 [  0   0   0]]

5. нули_лайк

numpy.zeros_like(a, dtype=None, order='K', subok=True)

Параметры выше.

Пример:

import numpy as np
a = np.zeros_like([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(a)

вывод:*

[[0. 0. 0.]
 [0. 0. 0.]]

6. one_like

numpy.ones_like(a, dtype=None, order='K', subok=True)

Параметры те же, что и выше.

Пример:

import numpy as np
a = np.ones_like([[1, 2, 3], [4, 5, 6]])
print(a)

вывод:*

[[1 1 1]
 [1 1 1]]

7. numpy.full_like

Возвращает массив заполненного и является Fill_Value же размерами и тип данного массива.

numpy.full_like(a, fill_value, dtype=None, order='K', subok=True)
параметр описывать
a данный массив
fill_value значение заполнения
dtype Возвращает тип данных массива, значение по умолчанию — None, используется тип данного массива
order Определяет структуру памяти массива. C (по строке), F (по столбцу), A (исходный порядок), K (порядок, в котором элементы появляются в памяти)
subok По умолчанию возвращаемый массив приводится к массиву базового класса. Если True, возвращается подкласс.

Zeros_like и one_like на самом деле являются частными случаями этого метода.

Пример:

import numpy as np

x = np.arange(6, dtype=int)
print(x)
print('-------------------')
a = np.full_like(x, 1)
b = np.full_like(x, 0.1)
c = np.full_like(x, 0.1, dtype=np.double)

print(a)
print(b)
print(c)

вывод:

[0 1 2 3 4 5]
-------------------
[1 1 1 1 1 1]
[0 0 0 0 0 0]
[0.1 0.1 0.1 0.1 0.1 0.1]

Добро пожаловать, чтобы обратить внимание на мой общедоступный номер

Python Road фермеров старого кода


扫码关注我的个人公众号