Concatenate(), stack(), vstack(), hstack() NumPy

Aby połączyć dwie tablice 3D w NumPy, możesz użyć funkcji concatenate. Przyjmuje ona trzy argumenty:

  • arrays: lista tablic do połączenia
  • axis: oś wzdłuż której tablica będzie łączona. Domyślnie jest to oś 0.
  • out: opcjonalnie, tablica do której wynik zostanie zapisany.

Na przykład, jeśli chcesz połączyć dwie tablice 3D o kształcie (2, 3, 4) i (2, 3, 4), wygląda to tak:

import numpy as np

a = np.random.random((2, 3, 4))

array([[[0.27716789, 0.53008684, 0.10013984, 0.15620086],
        [0.88685682, 0.12212957, 0.31898502, 0.34418252],
        [0.53840838, 0.33190352, 0.02789844, 0.56265886]],

       [[0.13419309, 0.69167961, 0.08270659, 0.77344485],
        [0.71147748, 0.13166062, 0.60646776, 0.024938  ],
        [0.44330139, 0.10066512, 0.92206087, 0.58706428]]])

b = np.random.random((2, 3, 4))

array([[[0.09307458, 0.11745333, 0.43036813, 0.88489684],
        [0.8052361 , 0.76421119, 0.46543788, 0.60395221],
        [0.22105655, 0.78187505, 0.52043199, 0.06296854]],

       [[0.48302276, 0.06804468, 0.72436741, 0.06736749],
        [0.98544143, 0.85248064, 0.38032969, 0.7543766 ],
        [0.91473262, 0.37909246, 0.66467057, 0.40860377]]])

c = np.concatenate((a, b), axis=0)

array([[[0.27716789, 0.53008684, 0.10013984, 0.15620086],
        [0.88685682, 0.12212957, 0.31898502, 0.34418252],
        [0.53840838, 0.33190352, 0.02789844, 0.56265886]],

       [[0.13419309, 0.69167961, 0.08270659, 0.77344485],
        [0.71147748, 0.13166062, 0.60646776, 0.024938  ],
        [0.44330139, 0.10066512, 0.92206087, 0.58706428]],

       [[0.09307458, 0.11745333, 0.43036813, 0.88489684],
        [0.8052361 , 0.76421119, 0.46543788, 0.60395221],
        [0.22105655, 0.78187505, 0.52043199, 0.06296854]],

       [[0.48302276, 0.06804468, 0.72436741, 0.06736749],
        [0.98544143, 0.85248064, 0.38032969, 0.7543766 ],
        [0.91473262, 0.37909246, 0.66467057, 0.40860377]]])

print(c.shape)  # (4, 3, 4)

Możesz również połączyć tablicę wzdłuż innej osi, np. osi 1:

a = np.random.random((2, 3, 4))
b = np.random.random((2, 3, 4))

d = np.concatenate((a, b), axis=1)

array([[[0.27716789, 0.53008684, 0.10013984, 0.15620086],
        [0.88685682, 0.12212957, 0.31898502, 0.34418252],
        [0.53840838, 0.33190352, 0.02789844, 0.56265886],
        [0.09307458, 0.11745333, 0.43036813, 0.88489684],
        [0.8052361 , 0.76421119, 0.46543788, 0.60395221],
        [0.22105655, 0.78187505, 0.52043199, 0.06296854]],

       [[0.13419309, 0.69167961, 0.08270659, 0.77344485],
        [0.71147748, 0.13166062, 0.60646776, 0.024938  ],
        [0.44330139, 0.10066512, 0.92206087, 0.58706428],
        [0.48302276, 0.06804468, 0.72436741, 0.06736749],
        [0.98544143, 0.85248064, 0.38032969, 0.7543766 ],
        [0.91473262, 0.37909246, 0.66467057, 0.40860377]]])

print(d.shape)  # (2, 6, 4)

Istnieje również funkcja stack, która pozwala na połączenie tablic wzdłuż nowej osi. Na przykład, jeśli chcesz połączyć dwie tablice 3D o kształcie (2, 3, 4) i (2, 3, 4) wzdłuż nowej osi o indeksie 3, wygląda to tak:

a = np.random.random((2, 3, 4))
b = np.random.random((2, 3, 4))

e = np.stack((a, b), axis=3)

array([[[[0.27716789, 0.09307458],
         [0.53008684, 0.11745333],
         [0.10013984, 0.43036813],
         [0.15620086, 0.88489684]],

        [[0.88685682, 0.8052361 ],
         [0.12212957, 0.76421119],
         [0.31898502, 0.46543788],
         [0.34418252, 0.60395221]],

        [[0.53840838, 0.22105655],
         [0.33190352, 0.78187505],
         [0.02789844, 0.52043199],
         [0.56265886, 0.06296854]]],


       [[[0.13419309, 0.48302276],
         [0.69167961, 0.06804468],
         [0.08270659, 0.72436741],
         [0.77344485, 0.06736749]],

        [[0.71147748, 0.98544143],
         [0.13166062, 0.85248064],
         [0.60646776, 0.38032969],
         [0.024938  , 0.7543766 ]],

        [[0.44330139, 0.91473262],
         [0.10066512, 0.37909246],
         [0.92206087, 0.66467057],
         [0.58706428, 0.40860377]]]])

print(e.shape)  # (2, 3, 4, 2)

Łączenie dwóch tablic 1D:

import numpy as np

# Tworzenie dwóch tablic 1D
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# Łączenie tablic
c = np.concatenate([a, b])
print(c)  # [1 2 3 4 5 6]

Łączenie dwóch tablic 2D:

import numpy as np

# Tworzenie dwóch tablic 2D
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# Łączenie tablic wzdłuż pierwszego wymiaru
c = np.concatenate([a, b], axis=0)
print(c)
# [[1 2]
#  [3 4]
#  [5 6]
#  [7 8]]

# Łączenie tablic wzdłuż drugiego wymiaru
d = np.concatenate([a, b], axis=1)
print(d)
# [[1 2 5 6]
#  [3 4 7 8]]

3. Łączenie trzech tablic 3D:

import numpy as np

a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])
c = np.concatenate((a, b), axis=0)

print(c)

[[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]

 [[ 9 10]
  [11 12]]

 [[13 14]
  [15 16]]]

Łączenie trzech tablic 3D z użyciem stack()

import numpy as np

a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])
c = np.stack((a, b), axis=0)

print(c)
[[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]]

[[[ 9 10]
  [11 12]]

 [[13 14]
  [15 16]]]

Łączenie trzech tablic 3D z użyciem vstack()

import numpy as np

a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])
c = np.vstack((a, b))

print(c)

[[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]

 [[ 9 10]
  [11 12]]

 [[13 14]
  [15 16]]]

Łączenie trzech tablic 3D z użyciem hstack()

import numpy as np

a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])

c = np.hstack((a, b))
print(c)

[[[ 1  2  9 10]
  [ 3  4 11 12]]

 [[ 5  6 13 14]
  [ 7  8 15 16]]]