numpy.ravel(a, order='C')
Return a flattened array
numpy.chararray.flatten(order='C')
Return a copy of the array collapsed into one dimension
numpy.squeeze(a, axis=None)
Remove single-dimensional entries from the shape of an array.
相同点: 将多维数组 降为 一维数组
不同点:
ravel() 返回的是视图(view),意味着改变元素的值会影响原始数组元素的值;
flatten() 返回的是拷贝,意味着改变元素的值不会影响原始数组;
squeeze()返回的是视图(view),仅仅是将shape中dimension为1的维度去掉;
ravel()示例:
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 def log_type(name,arr): 5 print("数组{}的大小:{}".format(name,arr.size)) 6 print("数组{}的维度:{}".format(name,arr.shape)) 7 print("数组{}的维度:{}".format(name,arr.ndim)) 8 print("数组{}元素的数据类型:{}".format(name,arr.dtype)) 9 #print("数组:{}".format(arr.data)) 10 11 a = np.floor(10*np.random.random((3,4))) 12 print(a) 13 log_type('a',a) 14 15 a1 = a.ravel() 16 print("a1:{}".format(a1)) 17 log_type('a1',a1) 18 a1[2] = 100 19 20 print(a) 21 log_type('a',a)
flatten()示例
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 def log_type(name,arr): 5 print("数组{}的大小:{}".format(name,arr.size)) 6 print("数组{}的维度:{}".format(name,arr.shape)) 7 print("数组{}的维度:{}".format(name,arr.ndim)) 8 print("数组{}元素的数据类型:{}".format(name,arr.dtype)) 9 #print("数组:{}".format(arr.data)) 10 11 a = np.floor(10*np.random.random((3,4))) 12 print(a) 13 log_type('a',a) 14 15 a1 = a.flatten() 16 print("修改前a1:{}".format(a1)) 17 log_type('a1',a1) 18 a1[2] = 100 19 print("修改后a1:{}".format(a1)) 20 21 print("a:{}".format(a)) 22 log_type('a',a)
squeeze()示例:
1. 没有single-dimensional entries的情况
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 def log_type(name,arr): 5 print("数组{}的大小:{}".format(name,arr.size)) 6 print("数组{}的维度:{}".format(name,arr.shape)) 7 print("数组{}的维度:{}".format(name,arr.ndim)) 8 print("数组{}元素的数据类型:{}".format(name,arr.dtype)) 9 #print("数组:{}".format(arr.data)) 10 11 a = np.floor(10*np.random.random((3,4))) 12 print(a) 13 log_type('a',a) 14 15 a1 = a.squeeze() 16 print("修改前a1:{}".format(a1)) 17 log_type('a1',a1) 18 a1[2] = 100 19 print("修改后a1:{}".format(a1)) 20 21 print("a:{}".format(a)) 22 log_type('a',a)
从结果中可以看到,当没有single-dimensional entries时,squeeze()返回额数组对象是一个view,而不是copy。
2. 有single-dimentional entries 的情况
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 def log_type(name,arr): 5 print("数组{}的大小:{}".format(name,arr.size)) 6 print("数组{}的维度:{}".format(name,arr.shape)) 7 print("数组{}的维度:{}".format(name,arr.ndim)) 8 print("数组{}元素的数据类型:{}".format(name,arr.dtype)) 9 #print("数组:{}".format(arr.data)) 10 11 a = np.floor(10*np.random.random((1,3,4))) 12 print(a) 13 log_type('a',a) 14 15 a1 = a.squeeze() 16 print("修改前a1:{}".format(a1)) 17 log_type('a1',a1) 18 a1[2] = 100 19 print("修改后a1:{}".format(a1)) 20 21 print("a:{}".format(a)) 22 log_type('a',a)