假设我想要将矩阵 A 进行归一化。我找到了下面这段代码:
A_norm = (A / np.sqrt((A ** 2).sum(-1))[..., np.newaxis]).astype(np.float32)
我假设我们在这里减去了平均值为0。我的问题是分母。我们正在对我们已经平方并求和的某些内容进行平方根运算,但我不明白它是什么。
具体来说,这个操作是什么意思:
np.sqrt((A ** 2).sum(-1))[..., np.newaxis]
我们拥有
np.sqrt((A ** 2).sum(-1))
这可以分解为
B = A**2
C = B.sum(-1)
D = np.sqrt(C)
其中,C
是经过操作展平的 B
的行和(列和应为 B.sum(0)
),D
是 C
逐元素开方后得到的结果。
为了使 A
得到正确的归一化,我们需要分母的形状正确,以便将 A
的第 k 行除以 D
的第 k 项。因此,我们必须明确地将 np.sqrt(C)
展平的结果重塑为列向量,如下所示:
D = np.sqrt(C)[..., np.newaxis]
[..., np.newaxis]
基本上保持了被求和减少的维数的数量。另一种方法是使用keepdims与summing。关于省略号...
扩展最后一个维度,请参见here
。有关省略号的更多信息:https://dev59.com/A3RA5IYBdhLWcg3w8iol - Divakarkeepdims
的问题,附带示例:https://dev59.com/q1gR5IYBdhLWcg3wu_f4 - hpauljnp.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