2017-09-21 91 views
0

我正在閱讀最近的一個開源項目的源代碼。當程序員想要將像array([0, 1, 2])這樣的行向量轉換爲像array([[0], [1], [2]])這樣的列向量時,使用了np.reshape(x, (-1,1))。 在評論中,它表示重塑對於保持數據連續性是必要的,而不是[:, np.newaxis]np.reshape(x,(-1,1))vs x [:, np.newaxis]

我嘗試了兩種方法,看起來他們會返回相同的結果。那麼數據鄰接保存在這裏意味着什麼呢?

+0

這個故事的某些部分在複述迷路。 (例如,關於「行向量」的部分看起來不正確;實際的1行隨機行向量對這些操作的響應會不同。) – user2357112

回答

0

兩種方式都會返回完全相同數據的視圖,因此「數據連續性」可能不是問題,因爲數據不會更改,只會更改視圖。見Numpy: use reshape or newaxis to add dimensions

但是,使用.reshape((-1,1))可能會有一個實際優勢,因爲它會將數組重新整形爲2d數組,無論原始形狀如何。對於[:, np.newaxis],其結果將取決於陣列的原始形狀,考慮到這些:

In [3]: a1 = np.array([0, 1, 2]) 

In [4]: a2 = np.array([[0, 1, 2]]) 

In [5]: a1.reshape((-1, 1)) 
Out[5]: 
array([[0], 
     [1], 
     [2]]) 

In [6]: a2.reshape((-1, 1)) 
Out[6]: 
array([[0], 
     [1], 
     [2]]) 

In [7]: a1[:, np.newaxis] 
Out[7]: 
array([[0], 
     [1], 
     [2]]) 

In [8]: a2[:, np.newaxis] 
Out[8]: array([[[0, 1, 2]]])