Computer >> Máy Tính >  >> Lập trình >> Python

Sự khác biệt giữa Flatten () và Ravel () trong Numpy

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'>