Как добавить элементы в массив в 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)
Результат:
Outputarr1 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)
Результат:
Outputarr1 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
:
- import numpy as np
- np_arr1 = np.array([[1, 2], [3, 4]])
- print(np_arr1)
Output[[1 2]
[3 4]]
Проверьте форму np_arr1
:
- np_arr1.shape
Output(2, 2)
Создайте и распечатайте другой массив, np_arr2
:
- np_arr2 = np.array([[10, 20, 30], [40, 50, 60]])
- print(np_arr2)
Output[[10 20 30]
[40 50 60]]
Проверьте форму np_arr2
:
- np_arr2.shape
Output(2, 3)
Затем попробуйте добавить массивы по разным осям. Вы можете добавить массив с формой 2, 3
к массиву с формой 2, 2
вдоль оси 1
, но не вдоль ось 0
.
Добавьте np_arr2
к np_arr1
по оси 0 или по строке:
- np.append(np_arr1, np_arr2, axis=0)
Вы получаете ValueError
:
OutputTraceback (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 или по столбцу:
- np.append(np_arr1, np_arr2, axis=1)
Результат:
Outputarray([[ 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)
Результат:
Outputnp_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)
Результат:
Outputnp_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)
Результат:
Outputnp_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.