2012-11-07 22 views
2

說我有一個矩陣:分配子向量多維數組在numpy的

from numpy import * 
a = zeros(shape=(nRows,nColumns)); 

,我想,以填補在那些第一列,當我嘗試做:

a[:][0] = ones(shape=(nRows,1)) 

我得到:

ValueError: output operand requires a reduction, but reduction is not enabled 

爲什麼它不起作用?

+2

現有答案是正確的。但只是回答你的問題,「爲什麼這不起作用」,你試圖將一個nRows x 1陣列塞進一行。換句話說,你試圖將一個單列,多行數組放入一行。無論如何,不​​要這樣做。還可以使用逗號索引而不是多個[] []索引 - 後者會爲每個[]添加一對浪費的中間數組對象。 – Iguananaut

回答

5

它應該是那麼容易,因爲:

a[:,0] = 1 

broadcasting將處理的細節。

>>> a = np.zeros((10,10)) 
>>> a 
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) 
>>> a[:,0]=1 
>>> a 
array([[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])