Mảng 3d thành mảng 4d python

Trong hướng dẫn này, bạn sẽ tìm hiểu về cách định hình lại mảng NumPy. Hướng dẫn này tập trung vào kỹ thuật định hình lại bằng cách sử dụng chức năng định hình lại mảng NumPy. Hình dạng của một mảng được định nghĩa là tổng số phần tử trong mỗi chiều của mảng

Định hình lại một mảng có nghĩa là thay đổi số phần tử trong một mảng hoặc thay đổi kích thước của mảng hoặc cả hai
Phương thức reshape[] của mô-đun NumPy được sử dụng để thay đổi hình dạng của mảng mà không thay đổi dữ liệu

Mục lục

1

 

Làm thế nào để định hình lại NumPy hoạt động?

Phương thức reshape[] của mô-đun NumPy có thể thay đổi hình dạng của một mảng. Chẳng hạn, bạn có một bảng có hàng và cột;
Lấy một ví dụ thực tế về một mảng có 12 cột và chỉ có 1 hàng

Bạn có thể giảm số cột từ 12 xuống còn 4 và thêm dữ liệu còn lại của các cột vào hàng mới. Như thể hiện trong hình bên dưới

Kỹ thuật định hình lại NumPy cho phép chúng tôi sắp xếp lại dữ liệu trong một mảng. các numpy. reshape[] không thay đổi mảng ban đầu, thay vào đó, nó tạo ra một dạng xem của mảng ban đầu và trả về một mảng mới [được định hình lại]. Cú pháp cho numpy. reshape[] được đưa ra dưới đây

cú pháp

numpy.reshape[array, shape, order = ‘C’]
  • mảng là mảng ban đầu sẽ áp dụng phương thức reshape[]
  • hình dạng là hình dạng mới. Nó phải tương thích với hình dạng của mảng ban đầu
  • order = ‘C’, giá trị của order có thể là A, C hoặc F. Các bảng chữ cái này biểu thị thứ tự chỉ mục trong đó các phần tử mảng sẽ được đọc

Phương thức reshape[] sẽ trả về một mảng đã được định hình lại với cùng một dữ liệu

 

Định hình lại 1d thành 2d

Để chuyển đổi mảng 1D thành mảng 2D, hãy gọi hàm reshape[] với mảng 1D làm đầu vào. Xem xét ví dụ sau, trong đó chúng ta có một mảng 1D có mười phần tử

Chúng tôi sẽ chuyển đổi mảng này thành mảng 2D sao cho mảng mới có hai chiều với năm phần tử mỗi phần tử hoặc năm cột

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]

đầu ra

Hàm reshape[] lấy mảng đầu vào, sau đó là một bộ xác định hình dạng của mảng mới

Hình dạng [2, 5] có nghĩa là mảng mới có hai chiều và chúng tôi đã chia mười phần tử của mảng đầu vào thành hai bộ năm phần tử

Hãy nhớ rằng số lượng phần tử trong mảng đầu ra phải giống như trong mảng đầu vào

 

Định hình lại 1d thành 3d

Trong ví dụ sau, chúng ta có 12 phần tử trong mảng đầu vào 1D. Chúng ta phải chia các phần tử thành ba chiều sao cho mỗi chiều có bốn phần tử

Mã số

import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
output_array = np.reshape[a, [3, 4]]

đầu ra

 

Định hình lại 2d thành 1d

Trong đoạn mã sau, chúng ta có một mảng 2D với bốn cột. Đoạn mã dưới đây sẽ định hình lại mảng thành một chiều chứa tất cả các phần tử

Mã số

import numpy as np
a = np.array[[[1, 2, 3, 4], [5, 6, 7, 8]]]
output_array = np.reshape[a, [1, 8]]
print[output_array]

đầu ra


Trong phương thức reshape[], bộ [1, 8] có nghĩa là mảng đầu ra 1D có tám cột

 

Định hình lại 2d thành 3d

Đoạn mã dưới đây chuyển đổi mảng 2D thành mảng 3D với cùng số phần tử

Mã số

import numpy as np
a = np.array[[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]]
output_array = np.reshape[a, [3, 4]]
print[output_array]

đầu ra


Mảng mới có ba chiều với bốn cột hoặc bốn phần tử trong mỗi chiều

 

Định hình lại 3d thành 1d

Đoạn mã sau chuyển đổi ba chiều của một mảng thành một chiều

Mã số

import numpy as np
a = np.array[[[1, 2, 3], [6, 7, 8], [4, 5, 6]]]
output_array = np.reshape[a, [1, 9]]
print[output_array]

đầu ra

 

Rshape 3d sang 2d

Để chuyển đổi mảng 3 chiều thành 2D, hãy xem đoạn mã dưới đây

Mã số

import numpy as np
a = np.array[[[1, 2], [6, 7], [4, 5]]]
output_array = np.reshape[a, [2, 3]]
print[output_array]

đầu ra

 

Định hình lại 4d thành 2d

Để chuyển đổi mảng 4D thành mảng 2D, hãy xem xét ví dụ sau

Mã số

import numpy as np
a = np.array[[[1, 2, 3], [6, 7, 8], [4, 5, 9], [10, 11, 13]]]
output_array = np.reshape[a, [2, 6]]
print[output_array]

đầu ra

 

Định hình lại với -1 [thứ nguyên không xác định]

Nếu bạn muốn chuyển đổi một mảng có kích thước không xác định thành mảng 1D, hãy sử dụng định hình lại [-1] như hình bên dưới

Mã số

________số 8_______

đầu ra

 

Định hình lại 0d thành 1d

Mảng có một chiều và độ dài bằng một được gọi là mảng 0D. Nói cách khác mảng 0 chiều là đại lượng vô hướng có độ dài không đổi bằng 1. Trong đoạn mã sau, chúng ta sẽ định hình lại mảng 0 chiều thành mảng 1 chiều

Mã số

import numpy as np
a = np.array[1]
print["dimension of array a: ", a.ndim]
b = np.reshape[a, -1]
print["dimension of array b: ", b.ndim]

đầu ra

Trong ví dụ trên, đầu tiên, chúng ta đã tạo một mảng 0 chiều. Vì mảng 0 chiều là đại lượng vô hướng nên chỉ có một phần tử. Chúng tôi không thể thêm nhiều mục hoặc bất kỳ thứ nguyên nào

Hàm ndim cho biết kích thước của một mảng. Sau đó, chúng tôi đã sử dụng định hình lại [-1] như trong tiêu đề trước để định hình lại mảng thành 1 chiều. Khi mảng là 1 chiều, bạn có thể thêm các phần tử vào mảng

 

Định hình lại đảo ngược

Trong một số trường hợp, bạn cần đảo ngược hình dạng của mảng về kích thước ban đầu

Nếu bạn đã áp dụng phương thức reshape[] cho một mảng và bạn muốn lấy lại hình dạng ban đầu của mảng, bạn có thể gọi lại hàm reshape trên mảng đó

Đảo ngược hình dạng của một mảng được thể hiện trong đoạn mã dưới đây

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
0

đầu ra

Trong ví dụ này, chúng ta có một mảng bốn chiều. Sau đó, chúng tôi định hình lại mảng thành hai chiều và lưu trữ mảng trong output_array

Khi áp dụng chức năng định hình lại trên output_array, chúng tôi đã lấy lại mảng ban đầu với cùng kích thước. Lưu ý rằng chúng tôi đã đưa ra kích thước của mảng ban đầu bằng cách sử dụng hàm hình dạng

Bạn cũng có thể thực hiện định hình lại đảo ngược trong một dòng mã như bên dưới

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
1

 

Định hình lại thứ tự

Khi sử dụng phương thức định hình lại để định hình lại mảng, có một tham số được gọi là thứ tự theo cú pháp định hình lại[]. Tham số thứ tự quyết định phần tử thứ tự chỉ mục nào sẽ được tìm nạp và sắp xếp trong mảng được định hình lại

Tham số thứ tự có thể có ba giá trị. C, F và A

  • Thứ tự C có nghĩa là các phần tử của mảng sẽ được định hình lại với chỉ số cuối cùng thay đổi nhanh nhất. Thứ tự C thực hiện các thao tác theo hàng trên các phần tử
  • Thứ tự F có nghĩa là các phần tử của mảng sẽ được định hình lại với chỉ số đầu tiên thay đổi nhanh nhất. Thứ tự F thực hiện các thao tác theo cột trên các phần tử của mảng
  • Thứ tự A phụ thuộc vào cách mảng được lưu trữ trong bộ nhớ. Nếu mảng được lưu trữ trong bộ nhớ theo thứ tự F, nó sẽ được định hình lại theo quy tắc thứ tự F. Nếu mảng được lưu trữ trong bộ nhớ theo thứ tự C, thì mảng sẽ được định hình lại theo quy tắc của thứ tự C

Xem xét ví dụ sau để thấy một bức tranh rõ ràng về cách các lệnh chỉ mục định hình lại một mảng

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
2

đầu ra


Trong ví dụ trên, theo thứ tự C hoặc thao tác theo hàng, hai hàng đầu tiên được kết hợp và sau đó hai hàng tiếp theo được hợp nhất. Trong hoạt động theo cột, các phần tử của cột thứ nhất và thứ ba được đọc trước

Nói cách khác, C là thao tác theo hàng và F là thao tác theo cột

 

Định hình lại dọc theo các trục

Các trục trong một mảng là các hướng dọc theo các cột và các hàng của mảng. Trong NumPy, các trục và kích thước được coi là giống nhau. Các trục được sử dụng để lập chỉ mục một mảng

Trong một mảng nhiều chiều, chỉ có một chỉ số trên một trục. Kiểm tra hình ảnh dưới đây

Trục 1 là hướng dọc theo cột và trục 0 là hướng dọc theo hàng. Ví dụ, nếu bạn có một mảng

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
3

Chúng tôi sẽ sử dụng các trục như [1, 1]. [1, 1] có nghĩa là hàng 1 và cột 1. Phương thức định hình lại NumPy[] định hình lại mảng dọc theo trục 0 hoặc chiều 0 dọc theo hàng

Chúng ta có thể thay đổi thao tác hàng thành thao tác cột bằng cách chỉ định đối số thứ tự trong phương thức reshape[]. Xem xét ví dụ sau trong đó chúng tôi đã áp dụng Đơn hàng C và Đơn hàng F

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
4

đầu ra

Do đó, thứ tự C định hình lại mảng dọc theo chiều 0 [hàng] và thứ tự F định hình lại mảng dọc theo chiều 1 [cột]
Bây giờ chúng ta hãy sử dụng các trục với định hình lại NumPy. Lưu ý rằng trong NumPy, kích thước là các trục. Ví dụ sau đây cho thấy cách chỉ định số chiều, số hàng và số cột trong một mảng

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
5

đầu ra


Trong mã này, có ba đối số trong phương thức reshape[]. Đối số đầu tiên là '3' cho biết số thứ nguyên trong mảng, đối số thứ hai là '4' chỉ định số lượng hàng và đối số thứ ba chỉ định số lượng cột

Nói cách khác, bạn có thể nói rằng mảng ngoài cùng có ba mảng bên trong, mỗi mảng trong số ba mảng tiếp theo chứa bốn mảng và cả bốn mảng đều có một phần tử

 

Định hình lại cột thành hàng

Phương thức reshape[] không thay đổi dữ liệu cột thành hàng nhưng nó thay đổi hình dạng của mảng là kích thước của mảng

Do đó, chúng ta chỉ có thể hoán đổi kích thước của một mảng bằng phương thức reshape[]
Chẳng hạn, nếu một mảng có bốn hàng và ba cột, chúng ta sẽ định hình lại mảng đó sao cho mảng mới có ba hàng và bốn cột

Ví dụ sau minh họa cách định hình lại hoán đổi kích thước

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
6

đầu ra


Chúng tôi đã sử dụng chức năng transpose[] của NumPy để thay đổi dữ liệu cột thành dữ liệu hàng

 

Định hình lại hàng thành cột

Theo cách tương tự, nếu một mảng có ba hàng và hai cột, việc định hình lại sẽ thay đổi kích thước sao cho mảng mới có ba cột và hai hàng. Hãy xem xét đoạn mã sau

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
7

đầu ra

 

Định hình lại mảng không đồng đều

Nếu một mảng không đồng đều, phương thức định hình lại sẽ không thể khớp tất cả các phần tử vào một mảng mới

Điều này là do mảng không đều có số phần tử lẻ, khi bạn định dạng lại mảng kiểu này thì phải còn 1 phần tử để đưa vào mảng mới. Do đó, một lỗi sẽ được ném. Xem xét ví dụ sau

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
8

đầu ra

 

Định hình lại hình ảnh

Bạn có thể định hình lại một mảng hình ảnh bằng phương pháp định hình lại. Trước tiên, bạn cần nhập hình ảnh và sau đó chuyển đổi hình ảnh thành một mảng

Sau đó, chúng tôi sẽ định hình lại mảng và cuối cùng chuyển đổi mảng đã định hình lại thành hình ảnh. Chúng ta sẽ áp dụng phương thức reshape[] cho hình sau


Hãy xem xét ví dụ dưới đây

Mã số

import numpy as npm
import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
output_array = np.reshape[a, [2, 5]]
print["2D array after converting: ", output_array]
9

Chúng tôi đã chuyển đổi hình ảnh sang thang độ xám để đơn giản hóa việc định hình lại. Sau đó lưu trữ mảng hình ảnh trong một biến.  

 

import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
output_array = np.reshape[a, [3, 4]]
0

đầu ra

 

Định hình lại các mảng lớn/lỗi ném

Khi bạn không chỉ định đúng kích thước để định hình lại một mảng, phương thức reshape[] sẽ báo lỗi. Sự cố này thường xảy ra khi bạn định hình lại một mảng có kích thước lớn

Ví dụ: khi định hình lại mảng của hình ảnh, mảng có kích thước khá lớn. Do đó ta cần chọn kích thước phù hợp để định hình lại mảng
Trong ví dụ trước, chúng ta có một mảng hình dạng [1200, 1200]

Kích thước của mảng là 1.440.000. Bây giờ chúng ta cần tìm ra kích thước phù hợp để định hình lại mảng. Ta sẽ tìm thừa số của 1200

Trong ví dụ trước, chúng ta chia 1200 cho 1. 5 và nhân 1200 với 1. 5 lần lượt cho chúng ta 800 và 1800
Nếu chúng tôi chỉ định kích thước không tương đương với kích thước của mảng ban đầu, định hình lại sẽ đưa ra lỗi sau

Lỗi bộ nhớ

Nếu bạn có một mảng có kích thước lớn hơn, phương thức reshape[] sẽ báo lỗi bộ nhớ. Lỗi bộ nhớ xuất hiện khi bạn thiếu RAM và bạn phải tải toàn bộ tập dữ liệu vào bộ nhớ

Một khái niệm gọi là xử lý hàng loạt đã được giới thiệu để giải quyết các lỗi bộ nhớ
Trong xử lý hàng loạt, dữ liệu được lưu trữ trong ổ cứng và được chia thành các lô nhỏ. Các lô sau đó được tải vào bộ nhớ từng cái một. Bằng cách này, bộ nhớ không bị cạn kiệt

 

NumPy định hình lại [] Vs NumPy chuyển đổi []

Sự khác biệt chính giữa NumPy reshape[] và transpose[] là reshape[] đưa ra một hình dạng mới cho mảng trong khi đó, hoán vị đảo ngược các trục

Phương pháp chuyển vị chỉ thay đổi hàng thành cột hoặc cột thành hàng [trục đảo ngược]. Phương thức định hình lại sẽ lấy một mảng đầu vào và định dạng mảng thành hình dạng đã cho

Hình dạng này có thể có bất kỳ kích thước nào và bất kỳ số lượng cột nào theo kích thước của mảng
Ví dụ sau giải thích sự khác biệt giữa reshape[] và transpose[]

Mã số

import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
output_array = np.reshape[a, [3, 4]]
1

đầu ra


Trong ví dụ trên, bạn có thể thấy rằng phương thức reshape[] đã thay đổi kích thước của mảng từ 4D thành 2D và số lượng cột từ 3 thành 6
Trong khi đó, transpose[] là một hàm hằng chỉ thực hiện một thao tác chuyển hàng thành cột và cột thành hàng

 

Định hình lại NumPy[] so với thay đổi kích thước NumPy[]

Cả hai phương thức reshape[] và resize[] của mô-đun NumPy đều được sử dụng để xác định kích thước mới của một mảng. Sự khác biệt chính giữa hai phương thức là phương thức reshape[] không thực hiện thay đổi đối với mảng ban đầu mà trả về một mảng mới làm đầu ra

Trong khi đó, phương thức thay đổi kích thước [] thực hiện các thay đổi trực tiếp đối với mảng ban đầu và trả về mảng ban đầu. Các ví dụ mã sau đây cho biết rõ ràng sự khác biệt giữa reshape[] và resize[]

Sử dụng định hình lại[]

import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
output_array = np.reshape[a, [3, 4]]
2

đầu ra


Ở đầu ra trên, mảng ban đầu vẫn giữ nguyên

Sử dụng thay đổi kích thước[]

import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
output_array = np.reshape[a, [3, 4]]
3

đầu ra


Như được hiển thị trong đoạn mã trên, phương thức thay đổi kích thước [] đã thực hiện các thay đổi đối với mảng ban đầu. Phương thức thay đổi kích thước [] không trả về bất kỳ thứ gì;

 

NumPy định hình lại [] so với NumPy làm phẳng []

Phương thức reshape[] định hình lại một mảng thành một hình dạng khác. Phương thức NumPy flatten[] như tên gọi làm phẳng một mảng. Phương thức flatten[] chuyển đổi một mảng có kích thước bất kỳ thành 1 chiều. Cú pháp của flatten[] như sau

cú pháp

import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
output_array = np.reshape[a, [3, 4]]
4

Nó sẽ trả về mảng 1 chiều. Nó không thay đổi mảng ban đầu

  • Tham số thứ tự có thể có bốn giá trị. C, F, A và K
  • C làm phẳng mảng dọc theo 0 chiều [hàng]
  • F làm phẳng mảng dọc theo chiều thứ nhất [cột]
  • Thứ tự A phụ thuộc vào cách mảng được lưu trữ trong bộ nhớ. Nếu mảng được lưu trữ trong bộ nhớ theo thứ tự F, nó sẽ được làm phẳng theo quy tắc thứ tự F. Nếu mảng được lưu trữ trong bộ nhớ theo thứ tự C, thì mảng sẽ được định hình lại theo quy tắc của thứ tự C
  • K làm phẳng một mảng theo thứ tự các phần tử được lưu trữ trong bộ nhớ

Ví dụ sau giải thích cách hoạt động của flatten[]

Mã số

import numpy as np
a = np.array[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
output_array = np.reshape[a, [3, 4]]
5

đầu ra


Phương thức flatten[] không thay đổi mảng ban đầu. Mảng đầu vào là ba chiều và được làm phẳng thành 1D bằng phương thức flatten[]

  • Chia sẻ trên facebook
  • Tweet trên Twitter

Mokhtar Ebrahim

Mokhtar là người sáng lập LikeGeek. com. Anh ấy làm quản trị viên hệ thống Linux từ năm 2010. Ông chịu trách nhiệm duy trì, bảo mật và khắc phục sự cố máy chủ Linux cho nhiều khách hàng trên khắp thế giới. Anh ấy thích viết các tập lệnh shell và Python để tự động hóa công việc của mình

Chủ Đề