numpy 辨異—— numpy.ravel() vs numpy.flatten() 與squeeze()函式
阿新 • • 發佈:2018-11-06
numpy.ravel() vs numpy.flatten()
首先宣告兩者所要實現的功能是一致的(將多維陣列降位一維),兩者的區別在於返回拷貝(copy)還是返回檢視(view),numpy.flatten()返回一份拷貝,對拷貝所做的修改不會影響(reflects)原始矩陣,而numpy.ravel()返回的是檢視(view,也頗有幾分C/C++引用reference的意味),會影響(reflects)原始矩陣。
兩者的區別
x = np.array([[1, 2], [3, 4]])
x.flatten()[1] = 100
x
array([[1, 2],
[3, 4]]) # flatten:返回的是拷貝x.ravel()[1] = 100
x
array([[ 1, 100],
[ 3, 4]])
具體例子見參考文獻:
https://blog.csdn.net/lanchunhui/article/details/50354978
squeeze 函式:從陣列的形狀中刪除單維度條目,即把shape中為1的維度去掉
用法:numpy.squeeze(a,axis = None)
1)a表示輸入的陣列;
2)axis用於指定需要刪除的維度,但是指定的維度必須為單維度,否則將會報錯;
3)axis的取值可為None 或 int 或 tuple of ints, 可選。若axis為空,則刪除所有單維度的條目;
4)返回值:陣列
5) 不會修改原陣列;
import numpy as np
x = np.array([[[0], [1], [2]]])
print(x)
"""
x=
[[[0]
[1]
[2]]]
"""
print(x.shape) # (1, 3, 1)
x1 = np.squeeze(x) # 從陣列的形狀中刪除單維條目,即把shape中為1的維度去掉
print(x1) # [0 1 2]
print(x1.shape) # (3,)
參考:https://blog.csdn.net/tracy_leaf/article/details/79297121