Манипулирование массивами NumPy

NumPy содержит некоторые функции для обработки массивов, которые можно условно разделить на следующие категории:


Изменение формы массива

Функция Описание
reshape Изменение формы без изменения данных
flat Итератор элементов массива
flatten Вернуть копию массива. Изменения, внесённые в копию, не повлияют на исходный массив.
ravel Вернуть плоский массив

numpy.reshape

Функция numpy.reshape может изменять форму без изменения данных. Формат следующий:

numpy.reshape(arr, newshape, order='C')
  • arr: Массив, форму которого нужно изменить
  • newshape: Целое число или массив целых чисел. Новая форма должна быть совместима с исходной формой.
  • order: 'C' -- по строкам, 'F' -- по столбцам, 'A' -- исходный порядок, 'k' -- порядок, в котором элементы располагаются в памяти.

Пример

import numpy as np a = np.arange(8) print ('Исходный массив:') print (a) print ('\n') b = a.reshape(4,2) print ('Изменённый массив:') print (b)

Вывод следующий:

原始数组:
[0 1 2 3 4 5 6 7]

修改后的数组:
[[0 1]
 [2 3]
 [4 5]
 [6 7]]

numpy.ndarray.flat

numpy.ndarray.flat — это итератор элементов массива. Пример:

Пример

import numpy as np a = np.arange(9).reshape(3,3) print ('Исходный массив:') for row in a: print (row) # Чтобы обработать каждый элемент массива, можно использовать атрибут flat, который является итератором элементов массива: print ('Массив после итерации:') for element in a.flat: print (элемент)

Вывод следующий:

原始数组:
[0 1 2]
[3 4 5]
[6 7 8]
迭代后的数组:
0
1
2
3
4
5
6
7
8

numpy.ndarray.flatten

numpy.ndarray.flatten возвращает копию массива. Изменения, сделанные в копии, не повлияют на исходный массив. Формат следующий:

ndarray.flatten(order='C')

Описание параметра:

  • order: 'C' -- по строкам, 'F' -- по столбцам, 'A' -- исходный порядок, 'K' -- порядок, в котором элементы располагаются в памяти.

Пример

import numpy as np a = np.arange(8).reshape(2,4) print ('Исходный массив:') print (a) print ('\n') # По умолчанию — по строкам print ('Уплощённый массив:') print (a.flatten()) print ('\n') print ('Массив, уплощённый в порядке F-style:') print (a.flatten(order = 'F'))

Вывод следующий:

原数组:
[[0 1 2 3]
 [4 5 6 7]]


展开的数组:
[0 1 2 3 4 5 6 7]


以 F 风格顺序展开的数组:
[0 4 1 5 2 6 3 7]

numpy.ravel

numpy.ravel() уплощает элементы массива, обычно в порядке 'C style'. Он возвращает представление массива (view, несколько похожее на ссылку в C/C++). Изменения затронут исходный массив.

Эта функция принимает два параметра:

numpy.ravel(a, order='C')

Описание параметра:

  • order: 'C' -- по строкам, 'F' -- по столбцам, 'A' -- исходный порядок, 'K' -- порядок, в котором элементы располагаются в памяти.

Пример

import numpy as np a = np.arange(8).reshape(2,4) print ('Исходный массив:') print (a) print ('\n') print ('После вызова функции ravel:') print (a.ravel()) print ('\n') print ('После вызова функции ravel в порядке F-style:') print (a.ravel(order = 'F'))

Вывод следующий:

原数组:
[[0 1 2 3]
 [4 5 6 7]]


调用 ravel 函数之后:
[0 1 2 3 4 5 6 7]


以 F 风格顺序调用 ravel 函数之后:
[0 4 1 5 2 6 3 7]

Переворот массива

Функция Описание
transpose Поменять местами размерности массива
ndarray.T иself.transpose()То же самое
rollaxis Прокрутить указанную ось назад
swapaxes Поменять местами две оси массива

numpy.transpose

Функция numpy.transpose используется для перестановки размерностей массива. Формат следующий:

numpy.transpose(arr, axes)

Описание параметра:

  • arr: Массив, над которым выполняется операция
  • axes: Список целых чисел, соответствующий размерностям. Обычно все размерности меняются местами.

Пример

import numpy as np a = np.arange(12).reshape(3,4) print ('Исходный массив:') print (a ) print ('\n') print ('Транспонированный массив:') print (np.transpose(a))

Вывод следующий:

原数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]


对换数组:
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

numpy.ndarray.T аналогичен numpy.transpose:

Пример

import numpy as np a = np.arange(12).reshape(3,4) print ('Исходный массив:') print (a) print ('\n') print ('Транспонированный массив:') print (a.T)

Вывод следующий:

原数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]


转置数组:
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

numpy.rollaxis

Функция numpy.rollaxis перемещает указанную ось назад в определённую позицию. Формат следующий:

numpy.rollaxis(arr, axis, start)

Описание параметра:

  • arr: Массив
  • axis: Ось, которую нужно переместить назад. Относительные позиции остальных осей не изменятся.
  • start: По умолчанию равно нулю, что означает полный откат. Ось будет перемещена в определённую позицию.

Пример

import numpy as np # Создан трёхмерный ndarray a = np.arange(8).reshape(2,2,2) print ('Исходный массив:') print (a) print ('Получить значение в массиве:') print(np.where(a==6)) print(a[1,1,0]) # равно 6 print ('\n') # Прокрутить ось 2 к оси 0 (ширина в глубину) print ('Вызов функции rollaxis:') b = np.rollaxis(a,2,0) print (b) # Просмотреть элемент a[1,1,0], то есть координата 6 становится [0, 1, 1] # Последний 0 перемещается в начало print(np.where(b==6)) print ('\n') # Прокрутить ось 2 к оси 1: (ширина в высоту) print ('Вызов функции rollaxis:') c = np.rollaxis(a,2,1) print (c) # Просмотр элемента a[1,1,0], т. е. координата значения 6, становится [1, 0, 1] # Последний 0 меняется местами с 1 перед ним print(np.where(c==6)) print ('\n')

Вывод следующий:

原数组:
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
获取数组中一个值:
(array([1]), array([1]), array([0]))
6


调用 rollaxis 函数:
[[[0 2]
  [4 6]]

 [[1 3]
  [5 7]]]
(array([0]), array([1]), array([1]))


调用 rollaxis 函数:
[[[0 2]
  [1 3]]

 [[4 6]
  [5 7]]]
(array([1]), array([0]), array([1]))

numpy.swapaxes

Функция numpy.swapaxes используется для перестановки двух осей массива. Формат следующий:

numpy.swapaxes(arr, axis1, axis2)
  • arr: Входной массив
  • axis1: Целое число, соответствующее первой оси
  • axis2: Целое число, соответствующее второй оси

Пример

import numpy as np # Создан трёхмерный ndarray a = np.arange(8).reshape(2,2,2) print ('Исходный массив:') print (a) print ('\n') # Теперь поменяем местами ось 0 (направление глубины) и ось 2 (направление ширины) print ('Массив после вызова функции swapaxes:') print (np.swapaxes(a, 2, 0))

Вывод следующий:

原数组:
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]


调用 swapaxes 函数后的数组:
[[[0 4]
  [2 6]]

 [[1 5]
  [3 7]]]

Изменение размерностей массива

Измерение Описание
broadcast Создать объект, имитирующий широковещание
broadcast_to Транслировать массив в новую форму
expand_dims Расширить форму массива
squeeze Удалить одномерные элементы из формы массива

numpy.broadcast

numpy.broadcast — это объект, используемый для имитации broadcasting. Он возвращает объект, который инкапсулирует результат broadcasting одного массива в другой.

Эта функция использует два массива в качестве входных параметров, как в следующем примере:

Пример

import numpy as np x = np.array([[1], [2], [3]]) y = np.array([4, 5, 6]) # Выполнить broadcast x относительно y b = np.broadcast(x,y) # У него есть атрибут iterator, основанный на кортеже итератора его собственных компонентов print ('Broadcast x относительно y:') r,c = b.iters # В Python3.x это next(context), в Python2.x это context.next() print (next(r), next(c)) print (next(r), next(c)) print ('\n') # Атрибут shape возвращает форму объекта broadcast print ('Форма объекта broadcast:') print (b.shape) print ('\n') # Вручную использовать broadcast для сложения x и y b = np.broadcast(x,y) c = np.empty(b.shape) print ('Вручную сложите x и y, используя broadcast:') print (c.shape) print ('\n') c.flat = [u + v for (u,v) in b] print ('Вызовите функцию flat:') print (c) print ('\n') # Это даёт тот же результат, что и встроенная поддержка broadcast в NumPy print ('Сумма x и y:') print (x + y)

Вывод:

对 y 广播 x:
1 4
1 5


广播对象的形状:
(3, 3)


手动使用 broadcast 将 x 与 y 相加:
(3, 3)


调用 flat 函数:
[[5. 6. 7.]
 [6. 7. 8.]
 [7. 8. 9.]]


x 与 y 的和:
[[5 6 7]
 [6 7 8]
 [7 8 9]]

numpy.broadcast_to

Функция numpy.broadcast_to выполняет broadcast массива в новую форму. Она возвращает представление исходного массива, доступное только для чтения. Обычно оно не является непрерывным. Если новая форма не соответствует правилам broadcasting NumPy, функция может выбросить ValueError.

numpy.broadcast_to(array, shape, subok)

Пример

import numpy as np a = np.arange(4).reshape(1,4) print ('Исходный массив:') print (a) print ('\n') print ('После вызова функции broadcast_to:') print (np.broadcast_to(a,(4,4)))

Вывод:

原数组:
[[0 1 2 3]]


调用 broadcast_to 函数之后:
[[0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]]

numpy.expand_dims

Функция numpy.expand_dims расширяет форму массива, вставляя новую ось в указанной позиции. Формат функции следующий:

 numpy.expand_dims(arr, axis)

Описание параметра:

  • arr: Входной массив
  • axis: Позиция, в которую вставляется новая ось

Пример

import numpy as np x = np.array(([1,2],[3,4])) print ('Массив x:') print (x) print ('\n') y = np.expand_dims(x, axis = 0) print ('Массив y:') print (y) print ('\n') print ('Формы массивов x и y:') print (x.shape, y.shape) print ('\n') # Вставить ось в позицию 1 y = np.expand_dims(x, axis = 1) print ('Массив y после вставки оси в позицию 1:') print (y) print ('\n') print ('x.ndim и y.ndim:') print (x.ndim,y.ndim) print ('\n') print ('x.shape и y.shape:') print (x.shape, y.shape)

Результат вывода:

数组 x:
[[1 2]
 [3 4]]


数组 y:
[[[1 2]
  [3 4]]]


数组 x 和 y 的形状:
(2, 2) (1, 2, 2)


在位置 1 插入轴之后的数组 y:
[[[1 2]]

 [[3 4]]]


x.ndim 和 y.ndim:
2 3


x.shape 和 y.shape:
(2, 2) (2, 1, 2)

numpy.squeeze

Функция numpy.squeeze удаляет единичные размерности из формы заданного массива. Формат функции следующий:

numpy.squeeze(arr, axis)

Описание параметра:

  • arr: входной массив
  • axis: целое число или кортеж целых чисел, используемый для выбора подмножества единичных размерностей в форме

Пример

import numpy as np x = np.arange(9).reshape(1,3,3) print ('Массив x:') print (x) print ('\n') y = np.squeeze(x) print ('Массив y:') print (y) print ('\n') print ('Формы массивов x и y:') print (x.shape, y.shape)

Результат вывода:

数组 x:
[[[0 1 2]
  [3 4 5]
  [6 7 8]]]


数组 y:
[[0 1 2]
 [3 4 5]
 [6 7 8]]


数组 x 和 y 的形状:
(1, 3, 3) (3, 3)

Объединение массивов

Функция Описание
concatenate Объединяет последовательность массивов вдоль существующей оси.
stack Объединяет последовательность массивов вдоль новой оси.
hstack Объединяет массивы в последовательность по горизонтали (в направлении столбцов).
vstack Объединяет массивы в последовательность по вертикали (в направлении строк).

numpy.concatenate

Функция numpy.concatenate используется для объединения двух или более массивов одинаковой формы вдоль заданной оси. Формат следующий:

numpy.concatenate((a1, a2, ...), axis)

Описание параметра:

  • a1, a2, ...: массивы одного типа
  • axis: ось, вдоль которой объединяются массивы; по умолчанию — 0

Пример

import numpy as np a = np.array([[1,2],[3,4]]) print ('Первый массив:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('Второй массив:') print (b) print ('\n') # Два массива имеют одинаковые размерности print ('Объединить два массива вдоль оси 0:') print (np.concatenate((a,b))) print ('\n') print ('Объединить два массива вдоль оси 1:') print (np.concatenate((a,b),axis = 1))

Результат вывода:

第一个数组:
[[1 2]
 [3 4]]


第二个数组:
[[5 6]
 [7 8]]


沿轴 0 连接两个数组:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]


沿轴 1 连接两个数组:
[[1 2 5 6]
 [3 4 7 8]]

numpy.stack

Функция numpy.stack используется для объединения последовательности массивов вдоль новой оси. Формат следующий:

numpy.stack(arrays, axis)

Описание параметра:

  • arraysПоследовательность массивов одинаковой формы
  • axis: ось в возвращаемом массиве, вдоль которой объединяются входные массивы

Пример

import numpy as np a = np.array([[1,2],[3,4]]) print ('Первый массив:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('Второй массив:') print (b) print ('\n') print ('Объедините два массива вдоль оси 0:') print (np.stack((a,b),0)) print ('\n') print ('Объедините два массива вдоль оси 1:') print (np.stack((a,b),1))

Результат вывода следующий:

第一个数组:
[[1 2]
 [3 4]]


第二个数组:
[[5 6]
 [7 8]]


沿轴 0 堆叠两个数组:
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]


沿轴 1 堆叠两个数组:
[[[1 2]
  [5 6]]

 [[3 4]
  [7 8]]]

numpy.hstack

numpy.hstack — удобная обёртка над numpy.concatenate, используемая для горизонтального объединения массивов вдоль второй оси (axis=1).

numpy.hstack рассматривает одномерные массивы как векторы-столбцы при конкатенации, что эквивалентно numpy.concatenate([numpy.atleast_1d(arr) for arr in arrays], axis=1) (когда все массивы имеют размерность ≥2, они напрямую конкатенируются вдоль axis=1).

Пример

import numpy as np a = np.array([[1,2],[3,4]]) print ('Первый массив:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('Второй массив:') print (b) print ('\n') print ('Горизонтальное объединение:') c = np.hstack((a,b)) print (c) print ('\n')

Результат вывода следующий:

第一个数组:
[[1 2]
 [3 4]]


第二个数组:
[[5 6]
 [7 8]]


水平堆叠:
[[1 2 5 6]
 [3 4 7 8]]

numpy.vstack

numpy.vstack — удобная обёртка над numpy.concatenate, используемая для вертикального объединения массивов вдоль первой оси (axis=0).

numpy.vstack автоматически преобразует одномерные массивы в двумерные векторы-строки, а затем объединяет их по вертикали, что эквивалентно numpy.concatenate([numpy.atleast_2d(arr) for arr in arrays], axis=0).

Пример

import numpy as np a = np.array([[1,2],[3,4]]) print ('Первый массив:') print (a) print ('\n') b = np.array([[5,6],[7,8]]) print ('Второй массив:') print (b) print ('\n') print ('Вертикальное объединение:') c = np.vstack((a,b)) print (c)

Результат вывода:

第一个数组:
[[1 2]
 [3 4]]


第二个数组:
[[5 6]
 [7 8]]


竖直堆叠:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

Разделение массивов

Функция Массив и операция
split Разделить массив на несколько подмассивов.
hsplit Разделить массив горизонтально на несколько подмассивов (по столбцам).
vsplit Разделить массив вертикально на несколько подмассивов (по строкам).

numpy.split

Функция numpy.split разбивает массив на подмассивы вдоль определенной оси. Формат следующий:

numpy.split(ary, indices_or_sections, axis)

Описание параметра:

  • ary: массив, который нужно разбить
  • indices_or_sections: если это целое число, массив разбивается на это число равных частей; если это массив, он задает позиции вдоль оси, по которым нужно разбить (левый открытый, правый закрытый).
  • axis: задает направление, вдоль которого нужно разбить. По умолчанию 0 — горизонтальное разбиение, т.е. горизонтальное направление. Если 1 — вертикальное разбиение, т.е. вертикальное направление.

Пример

import numpy as np a = np.arange(9) print ('Первый массив:') print (a) print ('\n') print ('Разделить массив на три подмассива одинакового размера:') b = np.split(a,3) print (b) print ('\n') print ('Разбить массив по позициям, указанным в одномерном массиве:') b = np.split(a,[4,7]) print (b)

Результат вывода:

第一个数组:
[0 1 2 3 4 5 6 7 8]


将数组分为三个大小相等的子数组:
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]


将数组在一维数组中表明的位置分割:
[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8])]

Когда axis равен 0, разбиение выполняется в горизонтальном направлении; когда axis равен 1 — в вертикальном направлении:

Пример

import numpy as np

a = np.arange(16).reshape(4, 4)
print('Первый массив:')
print(a)
print('\n')
print('Разбиение по умолчанию (axis 0):')
b = np.split(a,2)
print(b)
print('\n')

print('Разбиение вдоль горизонтального направления:')
c = np.split(a,2,1)
print(c)
print('\n')

print('Разбиение вдоль горизонтального направления:')
d= np.hsplit(a,2)
print(d)

Результат вывода:

第一个数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]


默认分割(0轴):
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]


沿水平方向分割:
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]


沿水平方向分割:
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]

numpy.hsplit

Функция numpy.hsplit используется для разделения массива по горизонтали путем указания количества возвращаемых массивов одинаковой формы.

Пример

import numpy as np harr = np.floor(10 * np.random.random((2, 6))) print ('Исходный массив:') print(harr) print ('После разделения:') print(np.hsplit(harr, 3))

Результат вывода:

原array:
[[4. 7. 6. 3. 2. 6.]
 [6. 3. 6. 7. 9. 7.]]
拆分后:
[array([[4., 7.],
       [6., 3.]]), array([[6., 3.],
       [6., 7.]]), array([[2., 6.],
       [9., 7.]])]

numpy.vsplit

numpy.vsplit выполняет разбиение по вертикальной оси, и его метод разбиения такой же, как использование hsplit.

Пример

import numpy as np a = np.arange(16).reshape(4,4) print ('Первый массив:') print (a) print ('\n') print ('Вертикальное разбиение:') b = np.vsplit(a,2) print (b)

Результат вывода:

第一个数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]


竖直分割:
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]

Добавление и удаление элементов массива

Функция Элемент и описание
resize Возвращает новый массив указанной формы.
append Добавить значения в конец массива.
insert Вставить значения перед указанными индексами вдоль указанной оси.
delete Удалить подмассив вдоль определённой оси и вернуть новый массив после удаления.
unique Найти уникальные элементы в массиве.

numpy.resize

Функция numpy.resize возвращает новый массив указанного размера.

Если новый массив больше исходного размера, он содержит копии элементов из исходного массива.

numpy.resize(arr, shape)

Описание параметра:

  • arr: массив, размер которого нужно изменить
  • shape: новая форма возвращаемого массива

Пример

import numpy as np a = np.array([[1,2,3],[4,5,6]]) print ('Первый массив:') print (a) print ('\n') print ('Форма первого массива:') print (a.shape) print ('\n') b = np.resize(a, (3,2)) print ('Второй массив:') print (b) print ('\n') print ('Форма второго массива:') print (b.shape) print ('\n') # Обратите внимание, что первая строка a повторяется в b, потому что размер стал больше. print ('Измените размер второго массива:') b = np.resize(a,(3,3)) print (b)

Результат вывода:

第一个数组:
[[1 2 3]
 [4 5 6]]


第一个数组的形状:
(2, 3)


第二个数组:
[[1 2]
 [3 4]
 [5 6]]


第二个数组的形状:
(3, 2)


修改第二个数组的大小:
[[1 2 3]
 [4 5 6]
 [1 2 3]]

numpy.append

Функция numpy.append добавляет значения в конец массива. Операция append выделяет память под весь массив и копирует исходный массив в новый массив. Кроме того, размерности входных массивов должны совпадать; в противном случае будет вызвана ошибка ValueError.

Функция append всегда возвращает одномерный массив.

numpy.append(arr, values, axis=None)

Описание параметра:

  • arr: входной массив
  • values: к чему добавлятьarrДобавляемое значение должно бытьarrтой же формы (кроме оси, по которой добавляется)
  • axis: по умолчанию None. Если axis не указан, выполняется горизонтальное добавление, и возвращаемый результат всегда одномерный массив! Если axis указан, это соответственно 0 и 1. Если axis указан, это соответственно 0 и 1 (количество столбцов должно совпадать). Если axis равен 1, массив добавляется справа (количество строк должно совпадать).

Пример

import numpy as np a = np.array([[1,2,3],[4,5,6]]) print ('Первый массив:') print (a) print ('\n') print ('Добавить элементы в массив:') print (np.append(a, [7,8,9])) print ('\n') print ('Добавить элементы вдоль оси 0:') print (np.append(a, [[7,8,9]],axis = 0)) print ('\n') print ('Добавить элементы вдоль оси 1:') print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))

Результат вывода:

第一个数组:
[[1 2 3]
 [4 5 6]]


向数组添加元素:
[1 2 3 4 5 6 7 8 9]


沿轴 0 添加元素:
[[1 2 3]
 [4 5 6]
 [7 8 9]]


沿轴 1 添加元素:
[[1 2 3 5 5 5]
 [4 5 6 7 8 9]]

numpy.insert

Функция numpy.insert вставляет значения во входной массив вдоль заданной оси перед заданными индексами.

Функция вставляет заданные значения или массивы в указанные позиции (или массив позиций), а затем возвращает новый массив. Вставляемые элементы могут быть скалярными значениями или массивами. Обратите внимание, что операция вставки возвращает новый массив и не изменяет исходный массив.

numpy.insert(arr, obj, values, axis)

Описание параметра:

  • arr: входной массив
  • obj: индекс, перед которым вставляются значения
  • values: значения, которые нужно вставить
  • axis: ось, вдоль которой выполняется вставка; если не указана, входной массив уплощается.

Пример

import numpy as np a = np.array([[1,2],[3,4],[5,6]]) print ('Первый массив:') print (a) print ('\n') print ('Параметр axis не передан. Входной массив уплощается перед удалением.') print (np.insert(a,3,[11,12])) print ('\n') print ('Передан параметр Axis. Массив значений транслируется, чтобы соответствовать входному массиву.') print ('Трансляция вдоль axis 0:') print (np.insert(a,1,[11],axis = 0)) print ('\n') print ('Трансляция вдоль axis 1:') print (np.insert(a,1,11,axis = 1))

Результат вывода следующий:

第一个数组:
[[1 2]
 [3 4]
 [5 6]]


未传递 Axis 参数。 在删除之前输入数组会被展开。
[ 1  2  3 11 12  4  5  6]


传递了 Axis 参数。 会广播值数组来配输入数组。
沿轴 0 广播:
[[ 1  2]
 [11 11]
 [ 3  4]
 [ 5  6]]


沿轴 1 广播:
[[ 1 11  2]
 [ 3 11  4]
 [ 5 11  6]]

numpy.delete

Функция numpy.delete возвращает новый массив, из которого удалён указанный подмассив. Как и в функции insert(), если параметр axis не указан, входной массив преобразуется в одномерный.

Numpy.delete(arr, obj, axis)

Описание параметра:

  • arr: входной массив
  • obj: может быть срезом, целым числом или целочисленным массивом, указывающим подмассив, который нужно удалить из входного массива.
  • axis: ось, вдоль которой удаляется указанный подмассив; если не указана, входной массив преобразуется в одномерный.

Пример

import numpy as np a = np.arange(12).reshape(3,4) print ('Первый массив:') print (a) print ('\n') print ('Параметр Axis не передан. Входной массив преобразуется в одномерный перед вставкой.') print (np.delete(a,5)) print ('\n') print ('Удалить второй столбец:') print (np.delete(a,1,axis = 1)) print ('\n') print ('Срез, содержащий альтернативные значения для удаления из массива:') a = np.array([1,2,3,4,5,6,7,8,9,10]) print (np.delete(a, np.s_[::2]))

Результат вывода:

第一个数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]


未传递 Axis 参数。 在插入之前输入数组会被展开。
[ 0  1  2  3  4  6  7  8  9 10 11]


删除第二列:
[[ 0  2  3]
 [ 4  6  7]
 [ 8 10 11]]


包含从数组中删除的替代值的切片:
[ 2  4  6  8 10]

numpy.unique

Функция numpy.unique используется для удаления дублирующихся элементов из массива.

numpy.unique(arr, return_index, return_inverse, return_counts)
  • arr: входной массив; если он не является одномерным массивом, он будет уплощён.
  • return_index: если этоtrue, вернуть позиции (индексы) элементов нового списка в старом списке и сохранить их в виде списка.
  • return_inverse: если этоtrueВозвращает позиции (индексы) элементов старого списка в новом списке и сохраняет их в виде списка.
  • return_countsЕсли он равенtrueВозвращает количество вхождений элементов дедуплицированного массива в исходном массиве

Пример

import numpy as np a = np.array([5,2,6,2,7,5,6,8,2,9]) print ('Первый массив:') print (a) print ('\n') print ('Дедуплицированные значения первого массива:') u = np.unique(a) print (u) print ('\n') print ('Массив индексов дедуплицированного массива:') u,indices = np.unique(a, return_index = True) print (indices) print ('\n') print ('Мы видим, что каждое значение соответствует индексу исходного массива:') print (a) print ('\n') print ('Индексы массива после удаления дубликатов:') u,indices = np.unique(a,return_inverse = True) print (u) print ('\n') print ('Индексы:') print (indices) print ('\n') print ('Восстановите исходный массив с помощью индексов:') print (u[indices]) print ('\n') print ('Возвращает количество вхождений дедуплицированных элементов:') u,indices = np.unique(a,return_counts = True) print (u) print (indices)

Результат вывода:

第一个数组:
[5 2 6 2 7 5 6 8 2 9]


第一个数组的去重值:
[2 5 6 7 8 9]


去重数组的索引数组:
[1 0 2 4 7 9]


我们可以看到每个和原数组下标对应的数值:
[5 2 6 2 7 5 6 8 2 9]


去重数组的下标:
[2 5 6 7 8 9]


下标为:
[1 0 2 0 3 1 2 4 0 5]


使用下标重构原数组:
[5 2 6 2 7 5 6 8 2 9]


返回去重元素的重复数量:
[2 5 6 7 8 9]
[3 2 2 1 1 1]
Другие расширения