Python numpy sum (-1)

3

假设我想要将矩阵 A 进行归一化。我找到了下面这段代码:

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]基本上保持了被求和减少的维数的数量。另一种方法是使用keepdims与summing。关于省略号...扩展最后一个维度,请参见here。有关省略号的更多信息:https://dev59.com/A3RA5IYBdhLWcg3w8iol - Divakar
最近有关于keepdims的问题,附带示例:https://dev59.com/q1gR5IYBdhLWcg3wu_f4 - hpaulj
np.newaxis是一些值得探究的东西,尽管它很令人困惑。它基本上是Numpy对于这个问题的答案:“我们如何将秩为1的数组(向量)转换为秩为2、秩为3和秩为N的数组(类似矩阵的数组、体积、N维体积等)”。在Python(IPython、Jupyter Notebook等)中尝试以下实验:用...替换颜色,并用None替换np.newaxis,分别输入np.random.rand(3)[:, np.newaxis]np.random.rand(3,3)[:, :, np.newaxis] - Ahmed Fasih
1个回答

3

我们拥有

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

这可以分解为

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

其中,C 是经过操作展平的 B 的行和(列和应为 B.sum(0)),DC 逐元素开方后得到的结果。

为了使 A 得到正确的归一化,我们需要分母的形状正确,以便将 A 的第 k 行除以 D 的第 k 项。因此,我们必须明确地将 np.sqrt(C) 展平的结果重塑为列向量,如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接