Hướng dẫn dùng np array_split python

Trong bài trước chúng ta đã tìm hiểu về cách nối, xếp chồng mảng trong numpy. Bài này chúng ta sẽ đi tìm hiểu về cách chia, tách mảng trong numpy.

Split array trong numpy là gì ?

Split array trong numpy là chia, tách một mảng thành nhiều mảng.

Ví dụ

import numpy as np

arr = np.array([1,2,3,4,5,6,7,8])

arr_split = np.array_split(arr,2)
print(arr_split)

Kết quả :

[array([1, 2, 3, 4]), array([5, 6, 7, 8])]

Cách tách mảng trong numpy (Split array trong numpy).

Sử dụng hàm array_split() để tách mảng trong numpy. Để tách một mảng thành nhiều mảng bạn phải truyền mảng và số cần chia mảng vào hàm array_split().

Cách tách mảng một chiều trong numpy.

Ví dụ tách một mảng thành 3 phần như sau:

Ví dụ

import numpy as np

arr = np.array([1,2,3,4,5,6,7,8])

arr_split = np.array_split(arr,3)
print(arr_split)

Kết quả :

[array([1, 2, 3]), array([4, 5, 6]), array([7, 8])]

Truy cập tới các mảng sau khi tách mảng.

Ví dụ

import numpy as np

arr = np.array([1,2,3,4,5,6,7,8])

arr_split = np.array_split(arr,3)
print(arr_split[0])
print(arr_split[1])
print(arr_split[2])

Kết quả :

[1 2 3]
[4 5 6]
[7 8]

Cách tách mảng 2 chiều trong numpy.

Numpy sử dụng phương thức array_split() để tách mảng 2 chiều. Cú pháp cũng giống như tách mảng một chiều. Bạn cần phải truyền mảng và số của mảng cần chia.

Ví dụ tách một mảng 2 chiều sau thành ba mảng 2 chiều như sau:

Ví dụ

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
arr_split = np.array_split(arr,3)
print(arr_split)

Kết quả :

[array([[1, 2],[3, 4]]), array([[5, 6],[7, 8]]), array([[ 9, 10],[11, 12]])]

Cách tách mảng theo dòng trong numpy.

Sử dụng hàm hsplit() trong numpy để tách mảng theo dòng rows.

Ví dụ

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
arr_split = np.hsplit(arr,2)
print(arr_split)

Kết quả :

[array([[ 1],[ 3],[ 5],[ 7],[ 9],[11]]), array([[ 2],[ 4],[ 6],[ 8],[10],[12]])]

Cách tách mảng theo cột trong numpy.

Sử dụng hàm vsplit() trong numpy để tách mảng theo cột column.

Ví dụ

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
arr_split = np.vsplit(arr,2)
print(arr_split)

Kết quả :

[array([[1, 2],[3, 4],[5, 6]]), array([[ 7,  8],[ 9, 10],[11, 12]])]

Cách tách mảng theo chiều sâu (depth) trong numpy.

Sử dụng hàm dsplit() trong numpy để tách mảng theo chiều sâu depth.

Lưu ý : hàm dsplit()  chỉ sử dụng cho mảng có số chiều từ 3 chiều trở lên. Nếu số chiều nhỏ hơn 3 chiều không thể sử dụng hàm dsplit().

Ví dụ

import numpy as np

arr = np.array([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]])
arr_split = np.dsplit(arr,2)
print(arr_split)

Kết quả :

[array([[[ 1], [ 3], [ 5]],[[ 7],[ 9],[11]]]), array([[[ 2],[ 4],[ 6]], [[ 8],[10], [12]]])]

Nội Dung

  • 1. Tách mảng một chiều bằng np.array_split()
  • 2. Tách mảng hai chiều bằng np.array_split()
  • 3. Tách mảng hai chiều với np.hsplit() và np.hstack()

1. Tách mảng một chiều bằng np.array_split()

Tách mảng là công việc thường dùng trong khi thao tác với các dữ liệu số. Tách mảng có nghĩa là phân cách từng phần tử trong mảng ra theo số lượng các phần tử cần phân tách.

Trong Numpy, khi tách mảng ta sẽ thường sử dụng hàm array_split() – hàm nãy sẽ tách mảng dựa theo số lượng phần tử cần phân tách có trong mảng ban đầu và trả về một mảng mới gồm các phần tử được phân tách bên trong.

Ví dụ dưới đây, sử dụng hàm array_split() để tách mảng ban đầu ra thành một mảng mới có 3 cặp phần tử như sau:

import numpy as np 

# Mang a 
a = np.array([1, 2, 3, 4, 5, 6]) 

# Tach mang thanh 3 cap phan tu 
b = np.array_split(a, 3) 
print(b)

# Hien thi cac phan tu sau khi tach trong mang
print(b[0])
print(b[1])
print(b[2])

Kết quả:

[array([1, 2]), array([3, 4]), array([5, 6])]

Nếu số lượng phần tử cần tách ra trong mảng ban đầu lớn hơn các cặp phần tử có thể tách cho mảng, Numpy sẽ điểu chỉnh để tách ra các cặp phần tử trong mảng mới sao cho phù hợp nhất.

import numpy as np 

# Mang a 
a = np.array([1, 2, 3, 4, 5, 6]) 

# Tach mang thanh 4 cap phan tu 
b = np.array_split(a, 4) 
print(b)

# Hien thi cac phan tu sau khi tach trong mang
print(b[0])
print(b[1])
print(b[2])
print(b[3])

Kết quả:

[array([1, 2]), array([3, 4]), array([5]), array([6])]
[1 2]
[3 4]
[5]
[6]

Lưu ý: Trong numpy còn có thể tách mảng bằng cách sử dụng hàm np.split() tuy nhiên, hàm này sẽ không thể tách phần tử khi số lượng cặp phần tử cần tách là không phù hợp.

2. Tách mảng hai chiều bằng np.array_split()

Các mảng 2 chiều cũng có thể hoàn toàn tách ra theo số lượng cặp phần tử bằng cách sử dụng hàm np.array_split() – kết quả của việc tách mảng hai chiều sẽ trả về môt mảng mới với các phần tử bên trong là các cặp mảng hai chiều được phân tách theo số lượng cặp.

Ví dụ dưới đây, sử dụng hàm np.array_split() để tách các phần tử trong mảng 2 chiều ban đầu thành mảng mới với 3 cặp phần tử cần phân tách như sau:

import numpy as np

# Mang a
a = np.array([
    [1, 2], 
    [3, 4], 
    [5, 6], 
    [7, 8], 
    [9, 10], 
    [11, 12]
])

# Tach mang 2 chieu thanh 3 cap 
b = np.array_split(a, 3)
print(b)

# Hien thi cac cap phan tu
print("Cac cap phan tu sau khi tach tu mang ban dau")
print(b[0],"\n")
print(b[1], "\n")
print(b[2], "\n")

Kết quả:

[array([[1, 2], [3, 4]]), array([[5, 6], [7, 8]]), array([[ 9, 10], [11, 12]])]
Cac cap phan tu sau khi tach tu mang ban dau
[[1 2]
 [3 4]] 

[[5 6]
 [7 8]] 

[[ 9 10]
 [11 12]] 

Nếu như bạn chỉ cần tách các ra các cặp phần tử từ mảng ban đầu theo trục dọc (hoặc trục ngang) của mảng hai chiều, khi đó bạn sẽ cần thêm tham số axis = 0 (để tách theo trục ngang) hay axis = 1 (để tách theo trục dọc ) vào trong hàm np.array_split() như sau:

import numpy as np

# Mang a
a = np.array([
    [1, 2], 
    [3, 4], 
    [5, 6], 
    [7, 8], 
    [9, 10], 
    [11, 12]
])

# Tach mang 2 chieu thanh 3 cap theo truc doc
b = np.array_split(a, 3, axis=1)
print(b)

# Hien thi cac cap phan tu
print("Cac cap phan tu sau khi tach tu mang ban dau")
print(b[0],"\n")
print(b[1], "\n")
print(b[2], "\n")

Kết quả:

[array([[ 1],
       [ 3],
       [ 5],
       [ 7],
       [ 9],
       [11]]), 
array([[ 2],
       [ 4],
       [ 6],
       [ 8],
       [10],
       [12]]), 
array([], shape=(6, 0), dtype=int64)]
Cac cap phan tu sau khi tach tu mang ban dau
[[ 1]
 [ 3]
 [ 5]
 [ 7]
 [ 9]
 [11]] 

[[ 2]
 [ 4]
 [ 6]
 [ 8]
 [10]
 [12]] 

[] 

3. Tách mảng hai chiều với np.hsplit() và np.hstack()

Hàm np.hsplit() được sử dụng để tách mảng hai chiều thành các cặp phần cho mảng mới với cách tách theo trục dọc, trong khi đó hàm np.hstack() được sử dụng để tách mảng 2 chiều thành các cặp phần tử theo trục ngang.

Ví dụ dưới đây, sử dụng hàm np.hsplit() để tách mảng 2 ban đầu chiều thành 3 cặp phẩn tử theo trục dọc như sau:

import numpy as np

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

# Tach mang thanh 3 cap theo truc doc
b = np.hsplit(a, 3)
print(b)

# Hien thi cac cap phan tu 
print("Cac cap phan tu sau khi tach tu mang ban dau") 
print(b[0],"\n") 
print(b[1], "\n") 
print(b[2], "\n")

Kết quả:

[array([[ 1],
       [ 4],
       [ 7],
       [10],
       [13],
       [16]]), 
array([[ 2],
       [ 5],
       [ 8],
       [11],
       [14],
       [17]]), 
array([[ 3],
       [ 6],
       [ 9],
       [12],
       [15],
       [18]])]
Cac cap phan tu sau khi tach tu mang ban dau
[[ 1]
 [ 4]
 [ 7]
 [10]
 [13]
 [16]] 

[[ 2]
 [ 5]
 [ 8]
 [11]
 [14]
 [17]] 

[[ 3]
 [ 6]
 [ 9]
 [12]
 [15]
 [18]]