2016-12-02 61 views
0

假設我想我正常化跨越這些代碼來矩陣A:Python的numpy的總和(-1)

A_norm = (A/np.sqrt((A ** 2).sum(-1))[..., np.newaxis]).astype(np.float32) 

我們在這裏減去0均值,我想。我的問題是分母。我們正在平衡和總結一些東西的平方根,但我不明白。

具體來說,這是什麼呢:

np.sqrt((A ** 2).sum(-1))[..., np.newaxis] 
+1

平方根。這個'[...,np.newaxis]'基本上保持了相同數量的dims,這個數量被求和減少了。替代方法是使用[keepdims' with summming](https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.sum.html)。在省略號'''擴展最後一個昏暗,請參閱['這裏'](http://stackoverflow.com/a/40383002/3293881)。關於省略號的更多信息:http://stackoverflow.com/questions/772124/what-does-the-python-ellipsis-object-do – Divakar

+0

關於'keepdims'的最近問題,用示例:http://stackoverflow.com/questions/40927156/python中的keepdims的作用 – hpaulj

+0

['np.newaxis'](https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#numpy.newaxis )是值得搞清楚的,儘管它很混亂。它基本上是Numpy對這個問題的回答,「我們如何將1級陣列(向量)轉換爲2級和3級和N級陣列(分別爲矩陣狀陣列,體積,N維體積)」。在Python中進行以下試驗(IPython,Jupyter Notebook等):'np.random.rand(3)[:,np.newaxis]'和'np.random.rand(3,3)[:,:, np.newaxis]',用'...'替換顏色,用'None'替換'np.newaxis'。 –

回答

1

我們有

np.sqrt((A ** 2).sum(-1)) 

它可以分解爲

B = A**2 
C = B.sum(-1) 
D = np.sqrt(C) 

其中CB的行總和,其中已被操作壓扁(列總和將爲B.sum(0))和DC的入門平方根。

對於A是正確地歸一化,我們所需要的分母被正確地成形,以便通過Dķ個術語的Aķ個行分割。因此,我們必須明確地重塑np.sqrt(C)扁平化的結果爲是列向量,如下所示沿軸線最後總結了值的

D = np.sqrt(C)[..., np.newaxis]