Как объединить массивы python
Перейти к содержимому

Как объединить массивы python

  • автор:

Как объединить массивы в Python (с примерами)

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

numpy.concatenate ((a1, a2, ….), ось = 0)

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

В этом руководстве представлено несколько примеров использования этой функции на практике.

Пример 1: объединение двух массивов

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

import numpy as np #create two arrays arr1 = np.array([1, 2, 3, 4, 5]) arr2 = np.array([6, 7, 8]) #concatentate the two arrays np.concatenate ((arr1, arr2)) [1, 2, 3, 4, 5, 6, 7, 8] 

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

import numpy as np #create two arrays arr1 = np.array([[3, 5], [9, 9], [12, 15]]) arr2 = np.array([[4, 0]]) #concatentate the two arrays np.concatenate ((arr1, arr2), axis= 0 ) array([[3, 5], [9, 9], [12, 15], [4, 0]]) #concatentate the two arrays and flatten the result np.concatenate ((arr1, arr2), axis= None ) array([3, 5, 9, 9, 12, 15, 4, 0]) 

Пример 2. Объединение более двух массивов

Мы можем использовать аналогичный код для объединения более двух массивов:

import numpy as np #create four arrays arr1 = np.array([[3, 5], [9, 9], [12, 15]]) arr2 = np.array([[4, 0]]) arr3 = np.array([[1, 1]]) arr4 = np.array([[8, 8]]) #concatentate all the arrays np.concatenate ((arr1, arr2, arr3, arr4), axis= 0 ) array([[3, 5], [9, 9], [12, 15], [4, 0], [1, 1], [8, 8]]) #concatentate all the arrays and flatten the result np.concatenate ((arr1, arr2, arr3, arr4), axis= None ) array([3, 5, 9, 9, 12, 15, 4, 0, 1, 1, 8, 8]) 

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять аналогичные операции в NumPy:

Как соединить два массива python

Соединить два массива довольно просто с помощью конкатенации.

l1 = [1, 2, 3] l2 = [4, 5, 6] l1 + l2 # [1, 2, 3, 4, 5, 6] 

Как объединить два списка в Python

Объединение списков — это процесс создания единого списка из нескольких меньших списков путем их последовательного соединения.

В Python есть много способов объединения списков. В частности, в этой статье мы рассмотрим, как объединить два списка в Python с помощью оператора плюс, оператора распаковки, оператора умножения, цикла for , itertools.chain() и extend() .

Во всех приведенных ниже фрагментах кода мы будем использовать следующие списки:

list_a = [1, 2, 3, 4] list_b = [5, 6, 7, 8] 

Объединение списка операторов +

Самый простой и понятный способ объединить два списка в Python — это оператор плюс ( + ):

list_c = list_a + list_b print (list_c) # [1, 2, 3, 4, 5, 6, 7, 8] 

Конкатенация списка с помощью распаковки

Этот метод позволяет объединить несколько списков. Это довольно новая функция, доступная только в Python 3.6+. Оператор распаковки, как следует из названия, распаковывает объект iterable на его элементы. Распаковка полезна, когда мы хотим сгенерировать множество аргументов из одного списка. Например:

def foo(a, b, c, d): return a + b + c + d # We want to use the arguments of the following list with the foo function. # However, foo doesn't take a list, it takes 4 numbers, which is why we need to # unpack the list. foo(*list_a) # This is the same as if we were to call foo(1,2,3,4) 

Вкратце, мы используем конструктор списка ( [a,b..] ) и генерируем элементы нового списка по порядку, распаковывая несколько списков один за другим:

list_c = [*list_a, *list_b, *list_a] print (list_c) # [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4] 

Объединение списков операторов умножения

Оператор multiply( * ) — это частный случай конкатенации списков в Python. Он используется для многократного повторения всего списка (поэтому он обозначается оператором умножения):

print(list_a * 2) # [1, 2, 3, 4, 1, 2, 3, 4] 

Конкатенация списка в цикле for

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

for i in list_b: list_a.append(i) print(list_a) # [1, 2, 3, 4, 5, 6, 7, 8] 

Объединение списков itertools.chain()

Этот метод работает с iterables . Он создает и возвращает итератор, который позже может быть использован для построения связанного списка (представьте его как стрелку, которая просто запоминает порядок элементов в результирующем списке):

# Если бы мы вызывали itertools.chain () вот так iterator = itertools.chain([1, 2], [3, 4]) # По сути, итератор - это стрелка, которая может дать нам следующий элемент в последовательности, # поэтому, если мы вызываем конструктор list() с указанной итерацией, он работает следующим образом: list(iterator) 
# Итератор: следующий элемент в этом списке - 1 [1, 2], [3, 4] ^ # Итератор: следующий элемент в этом списке - 2 [1, 2], [3, 4] ^ # Итератор: следующий элемент в этом списке - 3 [1, 2], [3, 4] ^ # Итератор: следующий элемент в этом списке - 4 [1, 2], [3, 4] ^ # Итак, вызов list() выглядит примерно так: list([1,2,3,4]) # Имейте в виду, что это все псевдокод, Python не дает разработчику прямого контроля над итератором

Для этого метода вам нужно будет импортировать itertools :

import itertools list_c = list(itertools.chain(list_a, list_b)) print (list_c) # [1, 2, 3, 4, 5, 6, 7, 8] 

Конкатенация списков с extension()

Это встроенная функция, которую можно использовать для расширения списка. Здесь мы расширяем первый список, добавляя в него элементы второго списка:

list_a.extend(list_b) print (list_a) # [1, 2, 3, 4, 5, 6, 7, 8] 

Вывод

В этой статье мы рассмотрели пять способов объединения двух списков в Python — с помощью оператора плюс, оператора распаковки, оператора умножения, цикла for , itertools.chain() и extend() .

Мы уже писали об объединении в предыдущей статье «Конкатенация двух списков в Python». Эта статья являться более расширенным списком методов конкатенации.

Операции с массивами / np 6

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

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

Можно осуществить слияние массивов для создания нового, который будет содержать все элементы объединенных. NumPy использует концепцию стекинга и предлагает для этого кое-какие функции. Например, можно осуществить вертикальный стекинг с помощью функции vstack() , которая добавит второй массив в первый с помощью новых рядов. А функция hstack() осуществляет горизонтальная стекинг, добавляя второй массив в виде колонок.

>>> A = np.ones((3, 3)) >>> B = np.zeros((3, 3)) >>> np.vstack((A, B)) array([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.], [ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]]) >>> np.hstack((A,B)) array([[ 1., 1., 1., 0., 0., 0.], [ 1., 1., 1., 0., 0., 0.], [ 1., 1., 1., 0., 0., 0.]]) 

Еще две функции, которые выполняют стекинг для нескольких массивов — это column_stack() и row_stack() . Они работают независимо от первых двух. Их используют для одномерных массивов, для объединения значения в ряды или колонки и формирования двумерного массива.

>>> a = np.array([0, 1, 2]) >>> b = np.array([3, 4, 5]) >>> c = np.array([6, 7, 8]) >>> np.column_stack((a, b, c)) array([[0, 3, 6], [1, 4, 7], [2, 5, 8]]) >>> np.row_stack((a, b, c)) array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) 

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

Из прошлого раздела вы узнали, как собирать массивы с помощью стекинга. Теперь разберемся с разделением их на части. В NumPy для этого используется разделение. Также имеется набор функций, который работают в горизонтальной ( hsplit() ) и вертикальной ( vsplit() ) ориентациях.

>>> A = np.arange(16).reshape((4, 4)) >>> A array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]]) 

Так, если нужно разбить массив горизонтально, то есть, поделить ширину массива на две части, то матрица A размером 4×4 превратится в две матрицы 2×4.

>>> [B,C] = np.hsplit(A, 2) >>> B array([[ 0, 1], [ 4, 5], [ 8, 9], [12, 13]]) >>> C array([[ 2, 3], [ 6, 7], [10, 11], [14, 15]]) 

Если же нужно разбить массив вертикально, то есть поделить высоту на две части, то матрица A размером 4×4 превратится в 2 размерами 4×2.

>>> [B,C] = np.vsplit(A, 2) >>> B array([[0, 1, 2, 3], [4, 5, 6, 7]]) >>> C array([[ 8, 9, 10, 11], [12, 13, 14, 15]]) 

Более сложная команда — функция split() . Она позволяет разбить массив на несимметричные части. Массив передается в качестве аргумента, но вместе с ним необходимо указать и индексы частей, на которые его требуется разбить. Если указать параметр axis = 1 , то индексами будут колонки, а если axis = 0 — ряды.

Например, необходимо разбить матрицу на три части. Первая из которых будет включать первую колонку, вторая — вторую и третью колонки, а третья — последнюю. Здесь нужно указать следующие индексы.

>>> [A1,A2,A3] = np.split(A,[1,3],axis=1) >>> A1 array([[ 0], [ 4], [ 8], [12]]) >>> A2 array([[ 1, 2], [ 5, 6], [ 9, 10], [13, 14]]) >>> A3 array([[ 3], [ 7], [11], [15]]) 

То же самое можно проделать и для рядов.

>>> [A1,A2,A3] = np.split(A,[1,3],axis=0) >>> A1 array([[0, 1, 2, 3]]) >>> A2 array([[ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> A3 array([[12, 13, 14, 15]]) 

Эта же особенность включает функции vsplit() и hsplit() .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *