Có nhiều cách để tạo một mảng numpy. Numpy cung cấp hai loại cách khác nhau để chuyển đổi một ndarray thành 1Darray:đó là sử dụng phương thức flatten () và phương thức kia sử dụng phương thức ravel ().
Ví dụ
#Import required library, numpy import numpy as np #create an array from a list arr = np.array( [ (2, 7, 3, 4), (5, 6, 9, 1)]) #flatten_output print(arr.flatten()) #ravel_output print(arr.ravel())
Đầu ra
[2 7 3 4 5 6 9 1] [2 7 3 4 5 6 9 1]
Bây giờ ở trên, chúng ta có thể thấy rằng cả hai hàm đều trả về cùng một danh sách, vì vậy câu hỏi được đặt ra, tại sao lại có hai phương thức cho cùng một tác vụ?
Dưới đây là những điểm khác biệt chính giữa phương thức flatten () và ravel ().
arr.ravel ()
-
Trả về tham chiếu duy nhất của mảng ban đầu
-
Khi sửa đổi mảng ở trên (arr), chúng ta có thể thấy rằng giá trị của mảng ban đầu cũng thay đổi.
-
Vì phương thức ravel không chiếm bất kỳ bộ nhớ nào, nên ravel nhanh hơn phương thức flatten ()
-
Ravel là một hàm cấp thư viện
arr.flatten ()
-
Trả về bản sao gốc của mảng (arr).
-
Khi sửa đổi mảng ở trên (arr), giá trị mảng ban đầu sẽ không thay đổi.
-
Vì flatten () chiếm bộ nhớ, nên flatten () chậm hơn ravel ()
một chút -
Đó là một phương thức của một đối tượng ndarray.
Ví dụ
#Import required library, numpy import numpy as np # Create a numpy array, arr arr = np.array([(1,2,3,4),(3,1,4,2)]) # Let's print the array arr print ("Original array:\n ", arr) #print(arr) # To check the dimension of array (dimension =2) and type is numpy.ndarray print ("Dimension of original array: %d \n Type of original array: %s" % (arr.ndim,type(arr))) print("\nOutput from ravel method: \n") # Convert nd array to 1D array b_arr = arr.ravel() # Ravel only passes a view of original array to array 'b_arr' print(b_arr) b_arr[0]=1000 print(b_arr) # Note here that value of original array 'arr' at also arr[0][0] becomes 1000 print(arr) # Just to check the dimension i.e. 1 and type is same numpy.ndarray print ("Dimension of array: %d \n Type of array: %s" % (b_arr.ndim,type(b_arr))) print("\nOutput from flatten method: \n") # Convert nd array to 1D array c_arr = arr.flatten() # Flatten passes copy of original array to 'c_arr' print(c_arr) c_arr[0]=0 print(c_arr) # Note that by changing value of c_arr there is no affect on value of original array 'arr' print(arr) print ("Dimension of array->%d \n Type of array->%s" % (c_arr.ndim,type(c_arr)))
Đầu ra
Original array: [[1 2 3 4] [3 1 4 2]] Dimension of original array: 2 Type of original array: <class 'numpy.ndarray'> Output from ravel method: [1 2 3 4 3 1 4 2] [1000 2 3 4 3 1 4 2] [[1000 2 3 4] [ 3 1 4 2]] Dimension of array: 1 Type of array: <class 'numpy.ndarray'> Output from flatten method: [1000 2 3 4 3 1 4 2] [0 2 3 4 3 1 4 2] [[1000 2 3 4] [ 3 1 4 2]] Dimension of array->1 Type of array-><class 'numpy.ndarray'>