Поиск по сайту:

Как добавить элементы в массив в Python


Введение

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

Во многих случаях вы можете использовать List для создания массивов, поскольку List обеспечивает гибкость, например смешанные типы данных, и по-прежнему обладает всеми характеристиками массива. Узнайте больше о списках в Python.

Примечание. В массив можно добавлять только элементы одного типа данных. Точно так же вы можете соединить только два массива данных одного и того же типа.

Добавление элементов в массив с помощью модуля Array

С помощью модуля массива вы можете объединять или объединять массивы с помощью оператора +, а также добавлять элементы в массив с помощью append(), extend( ) и методы insert().

Syntax Description
+ operator, x + y Returns a new array with the elements from two arrays.
append(x) Adds a single element to the end of the array.
extend(iterable) Adds a list, array, or other iterable to the end of array.
insert(i, x) Inserts an element before the given index of the array.

В следующем примере показано, как создать новый объект массива путем объединения двух массивов:

import array

# create array objects, of type integer
arr1 = array.array('i', [1, 2, 3])
arr2 = array.array('i', [4, 5, 6])

# print the arrays
print("arr1 is:", arr1) 
print("arr2 is:", arr2)

# create a new array that contains all of the elements of both arrays 
# and print the result
arr3 = arr1 + arr2
print("After arr3 = arr1 + arr2, arr3 is:", arr3)

Результат:

Output
arr1 is: array('i', [1, 2, 3]) arr2 is: array('i', [4, 5, 6]) After arr3 = arr1 + arr2, arr3 is: array('i', [1, 2, 3, 4, 5, 6])

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

В следующем примере показано, как добавлять данные в массив с помощью методов append(), extend() и insert():

import array

# create array objects, of type integer
arr1 = array.array('i', [1, 2, 3])
arr2 = array.array('i', [4, 5, 6])

# print the arrays
print("arr1 is:", arr1) 
print("arr2 is:", arr2)

# append an integer to an array and print the result
arr1.append(4)
print("\nAfter arr1.append(4), arr1 is:", arr1)

# extend an array by appending another array of the same type 
# and print the result
arr1.extend(arr2)
print("\nAfter arr1.extend(arr2), arr1 is:", arr1)

# insert an integer before index position 0 and print the result
arr1.insert(0, 10)
print("\nAfter arr1.insert(0, 10), arr1 is:", arr1)

Результат:

Output
arr1 is: array('i', [1, 2, 3]) arr2 is: array('i', [4, 5, 6]) After arr1.append(4), arr1 is: array('i', [1, 2, 3, 4]) After arr1.extend(arr2), arr1 is: array('i', [1, 2, 3, 4, 4, 5, 6]) After arr1.insert(0, 10), arr1 is: array('i', [10, 1, 2, 3, 4, 4, 5, 6])

В предыдущем примере каждый метод вызывается для объекта массива arr1 и изменяет исходный объект.

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

С модулем NumPy вы можете использовать функции NumPy append() и insert() для добавления элементов в массив.

Syntax Description
numpy.append(arr, values, axis=None) Appends the values or array to the end of a copy of arr. If the axis is not provided, then default is None, which means both arr and values are flattened before the append operation.
numpy.insert(arr, obj, values, axis=None) Inserts the values or array before the index (obj) along the axis. If the axis is not provided, then the default is None, which means that only arr is flattened before the insert operation.

Функция numpy.append() использует функцию numpy.concatenate() в фоновом режиме. Вы можете использовать numpy.concatenate() для объединения последовательности массивов вдоль существующей оси. Узнайте больше о процедурах работы с массивами в документации NumPy.

Примечание. Вам необходимо установить NumPy, чтобы протестировать пример кода в этом разделе.

В примерах в этом разделе используются двумерные (2D) массивы, чтобы показать, как функции манипулируют массивами в зависимости от заданного вами значения оси.

Добавление к массиву с помощью numpy.append()

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

Чтобы понять форму двумерного массива, рассмотрим строки и столбцы. array([[1, 2], [3, 4]]) имеет форму 2, 2, эквивалентную 2 строкам и 2 столбцам, а array( [[10, 20, 30], [40, 50, 60]]) имеет форму 2, 3, эквивалентную 2 строкам и 3 столбцам.

Протестируйте эту концепцию с помощью интерактивной консоли Python.

Сначала импортируйте модуль NumPy, затем создайте несколько массивов и проверьте их форму.

Импортируйте NumPy, затем создайте и распечатайте np_arr1:

  1. import numpy as np
  2. np_arr1 = np.array([[1, 2], [3, 4]])
  3. print(np_arr1)
Output
[[1 2] [3 4]]

Проверьте форму np_arr1:

  1. np_arr1.shape
Output
(2, 2)

Создайте и распечатайте другой массив, np_arr2:

  1. np_arr2 = np.array([[10, 20, 30], [40, 50, 60]])
  2. print(np_arr2)
Output
[[10 20 30] [40 50 60]]

Проверьте форму np_arr2:

  1. np_arr2.shape
Output
(2, 3)

Затем попробуйте добавить массивы по разным осям. Вы можете добавить массив с формой 2, 3 к массиву с формой 2, 2 вдоль оси 1, но не вдоль ось 0.

Добавьте np_arr2 к np_arr1 по оси 0 или по строке:

  1. np.append(np_arr1, np_arr2, axis=0)

Вы получаете ValueError:

Output
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<__array_function__ internals>", line 5, in append File "/Users/digitalocean/opt/anaconda3/lib/python3.9/site-packages/numpy/lib/function_base.py", line 4817, in append return concatenate((arr, values), axis=axis) File "<__array_function__ internals>", line 5, in concatenate ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 3

Вы не можете добавить массив со строками шириной в три столбца к массиву со строками шириной всего в два столбца.

Добавьте np_arr2 к np_arr1 по оси 1 или по столбцу:

  1. np.append(np_arr1, np_arr2, axis=1)

Результат:

Output
array([[ 1, 2, 10, 20, 30], [ 3, 4, 40, 50, 60]])

Вы можете добавить массив со столбцами высотой в две строки к другому массиву со столбцами высотой в две строки.

В следующем примере показано, как добавлять элементы в массив NumPy с помощью функции numpy.append():

import numpy as np

# create 2D array objects (integers)
np_arr1 = np.array([[1, 2], [3, 4]])
np_arr2 = np.array([[10, 20], [30, 40]])

# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)

# append an array to the end of another array and print the result
# both arrays are flattened before appending
append_axis_none = np.append(np_arr1, np_arr2, axis=None)
print("append_axis_none is:\n", append_axis_none)

# append an array to the end of another array along axis 0 (append rows)
# and print the result
append_axis_0 = np.append(np_arr1, np_arr2, axis=0)
print("append_axis_0 is:\n", append_axis_0)

# append an array to the end of another array along axis 1 (append columns)
# and print the result
append_axis_1 = np.append(np_arr1, np_arr2, axis=1)
print("append_axis_1 is:\n", append_axis_1)

Результат:

Output
np_arr1 is: [[1 2] [3 4]] np_arr2 is: [[10 20] [30 40]] append_axis_none is: [ 1 2 3 4 10 20 30 40] append_axis_0 is: [[ 1 2] [ 3 4] [10 20] [30 40]] append_axis_1 is: [[ 1 2 10 20] [ 3 4 30 40]]

В предыдущем примере показано, как функция numpy.append() работает для каждой оси двумерного массива и как изменяется форма результирующего массива. Когда ось равна 0, массив добавляется по строке. Когда ось равна 1, массив добавляется по столбцу.

Добавление в массив с помощью numpy.insert()

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

В отличие от функции numpy.append(), если ось не указана или указана как None, функция numpy.insert() сглаживает только первый массив и не сглаживает вставляемые значения или массив. Вы получите ValueError, если попытаетесь вставить 2D-массив в 2D-массив без указания оси.

В следующем примере показано, как вставлять элементы в массив с помощью функции numpy.insert():

import numpy as np

# create array objects (integers)
np_arr1 = np.array([[1, 2], [4, 5]])
np_arr2 = np.array([[10, 20], [30, 40]])
np_arr3 = np.array([100, 200, 300])

# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)
print("np_arr3 is:\n", np_arr3)

# insert a 1D array into a 2D array and then print the result
# the original array is flattened before insertion
insert_axis_none = np.insert(np_arr1, 1, np_arr3, axis=None)
print("insert_axis_none is:\n", insert_axis_none)

# insert an array into another array by row
# and print the result
insert_axis_0 = np.insert(np_arr1, 1, np_arr2, axis=0)
print("insert_axis_0 is:\n", insert_axis_0)

# insert an array into another array by column
# and print the result
insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1)
print("insert_axis_1 is:\n", insert_axis_1)

Результат:

Output
np_arr1 is: [[1 2] [4 5]] np_arr2 is: [[10 20] [30 40]] insert_axis_none is: [ 1 100 200 300 2 4 5] insert_axis_0 is: [[ 1 2] [10 20] [30 40] [ 4 5]] insert_axis_1 is: [[ 1 10 30 2] [ 4 20 40 5]]

В предыдущем примере, когда вы вставляли 2D-массив в другой 2D-массив вдоль оси 1, каждый массив внутри np_arr2 был вставлен как отдельный столбец в np_arr1. Если вы хотите вставить весь 2D-массив в другой 2D-массив, заключите в квадратные скобки значение индекса параметра obj, чтобы указать, что весь массив должен быть вставлен перед этой позицией. Без квадратных скобок numpy.insert() последовательно укладывает массивы в виде столбцов перед заданным индексом.

В следующем примере показан вывод с квадратными скобками вокруг параметра obj (index) и без него:

import numpy as np

# create 2D array objects (integers)
np_arr1 = np.array([[1, 2], [3, 4]])
np_arr2 = np.array([[10, 20], [30, 40]])

# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)

# insert an array, column by column, into another array
# and print the result
insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1)
print("insert_axis_1 is:\n", insert_axis_1)

# insert a whole array into another array by column
# and print the result
insert_index_axis_1 = np.insert(np_arr1, [1], np_arr2, axis=1)
print("insert_index_axis_1 is:\n", insert_index_axis_1)

Результат:

Output
np_arr1 is: [[1 2] [3 4]] np_arr2 is: [[10 20] [30 40]] insert_axis_1 is: [[ 1 10 30 2] [ 3 20 40 4]] insert_index_axis_1 is: [[ 1 10 20 2] [ 3 30 40 4]]

В предыдущем примере показано, как numpy.insert() вставляет столбцы в массив в зависимости от нотации индекса.

Заключение

В этой статье вы добавили элементы в массивы с помощью модулей array и NumPy. Продолжите свое обучение с помощью дополнительных руководств по Python.