可以将 Ndarray 转换为一维数组有两种方法: flatten()
和 Ravel()
-
import numpy as nmp
P = nmp.array( [ (1,8,4,5),(4,3,5,1) ] )
#OUTPUT:
print( P.flatten() )
# [ 1,8,4,5,4,3,5,1 ]
print ( P.ravel() )
# [ 1,8,4,5,4,3,5,1 ]
这里的问题是:为什么有两个不同的角色来执行相同的工作?
Flatten() 和 Ravel() 的区别
P.ravel():
- 仅返回原始数组的引用/视图
- 如果更改数组,我们将能够看到原始数组的值也发生了变化。
- Ravel 比 flatten() 更快,因为它不占用任何内存。
- Ravel 是库级别的库级别函数。
P.flatten():
- 返回初始数组的副本
- 当更改此数组的值时,原始数组的值不会更改。
- Flatten() 比 ravel() 快得多,因为它占用内存。
- Flatten 是 ndarray 使用的一种方法。
下面使用这段代码来看看 flatter() 和 ravel() 函数之间的区别。
import numpy as nmp
# Here, we will create a numpy array
P = nmp.array([(3,4,5,6),(5,3,6,7)])
# Now, we will print the array a
print ("Original array:
")
print(P)
# For checking the dimension of array (dimension = 2 and type is numpy.ndarray )
print ("Dimension of array: " , (P.ndim))
print("
The output for RAVEL
")
# Here, we will convert ndarray to 1D array
Q = P.ravel()
# As the ravel() only passes a view of the original array to array 'Q'
print(Q)
Q[0]=1000
print(Q)
# We can note here that value of the original array 'P' at also P[0][0] becomes 1000
print(P)
# Just for checking the dimension i.e. 1 and type is same numpy.ndarray )
print ("Dimension of array" ,(Q.ndim))
print("
The output for FLATTEN
")
# Here, we will convert ndarray to 1D array
R = P.flatten()
# Flatten passes copy of original array to 'R'
print(R)
R[0] = 0
print(R)
# Here, we can note that by changing the value of R
# there is no affect on value of original array 'P'
print(P)
print ("Dimension of array " , (R.ndim))
运行结果:
Original array:
[[3 4 5 6]
[5 3 6 7]]
Dimension of array: 2
The output for RAVEL
[3 4 5 6 5 3 6 7]
[1000 4 5 6 5 3 6 7]
[[1000 4 5 6]
[ 5 3 6 7]]
Dimension of array 1
The output for FLATTEN
[1000 4 5 6 5 3 6 7]
[0 4 5 6 5 3 6 7]
[[1000 4 5 6]
[ 5 3 6 7]]
Dimension of array 1
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Numpy Flatten() 和 Ravel() 函数的区别
本文链接:https://www.vsdiffer.com/vs/flatten-vs-ravel-numpy-functions.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。