1. 程式人生 > >numpy 辨異—— numpy.ravel() vs numpy.flatten() 與squeeze()函式

numpy 辨異—— numpy.ravel() vs numpy.flatten() 與squeeze()函式

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