2016-12-02 62 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]