Адрес статьи серии
- Самый подробный учебник по NumPy (1): Массивы NumPy
- NumPy Super Detailed Tutorial (2): Типы данных
- NumPy Super Detailed Tutorial (3): внутренний механизм и расширенная итерация ndarray
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=True
,иnum = 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 фермеров старого кода