Numpy 中 Flatten() 和 Ravel() 之间的差异
有许多方法可以创建 numpy 数组。Numpy 提供了两种不同的方法将 ndarray 转换为 1Darray:一种是使用 flatten() 方法,另一种是使用 ravel() 方法。
示例
#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())
输出
[2 7 3 4 5 6 9 1] [2 7 3 4 5 6 9 1]
现在,在上面我们可以看到两个函数返回相同的列表,那么问题就来了,为什么两个方法完成同样的任务?
以下是 flatten() 和 ravel() 方法之间的主要区别。
arr.ravel()
只返回原始数组的引用
通过修改上面的数组(arr),我们可以看到原始数组的值也会改变。
由于 ravel 方法不占用任何内存,因此它比 flatten() 速度更快
Ravel 是一个库级函数
arr.flatten()
返回数组(arr)的原始副本。
通过修改上面的数组(arr),原始数组将不会改变。
由于 flatten() 占用内存,因此它比 ravel() 慢一些
它是 ndarray 对象的一个方法。
示例
#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)))输出
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'>
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP