2016-09-17 66 views
1

因此,當我需要做一些線性代數時,我更容易將向量看作列向量。因此,我更喜歡(n,1)形狀。將numpy(n,)向量重塑爲(n,1)向量

形狀(n,)和(n,1)之間是否存在顯着的內存使用差異?

什麼是首選方式?

以及如何將(n,)向量重塑爲(n,1)向量。不知怎的,b.reshape((n,1))並沒有做到這一點。

a = np.random.random((10,1)) 
b = np.ones((10,)) 
b.reshape((10,1)) 
print(a) 
print(b) 

[[ 0.76336295] 
[ 0.71643237] 
[ 0.37312894] 
[ 0.33668241] 
[ 0.55551975] 
[ 0.20055153] 
[ 0.01636735] 
[ 0.5724694 ] 
[ 0.96887004] 
[ 0.58609882]] 
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] 
+0

哦okey。不知何故,我認爲np.reshape和其他np.methods不會修改,但obj.reshape或obj.method會修改。好的,謝謝 – tomtom

+0

'b.shape =(10,1)'是就地重塑的語法。 – hpaulj

回答

2

ndarray.reshape()返回新視圖或副本(取決於新形狀)。它不會修改陣列。

b.reshape((10, 1)) 

因爲這樣做是無效的,因爲創建的視圖/副本沒有分配給任何東西。 「修復」很簡單:

b_new = b.reshape((10, 1)) 

在兩個形狀之間所使用的內存量應該完全不同。 Numpy陣列使用strides的概念,因此尺寸(10,)(10, 1)都可以使用相同的緩衝區;跳到下一行和列的金額只是變化。