【发布时间】:2020-05-10 02:17:36
【问题描述】:
我似乎无法复制这个 numpy 算法。我正在使用 Julia,但想知道这段代码的数学解释。它似乎打破了我对线性代数的了解。
X = np.arange(-5, 5, 0.2).reshape(-1, 1)
X.shape ## (50, 1)
test = np.sum(X**2, 1).reshape(-1, 1) + np.sum(X**2, 1)
test.shape ## (50, 50)
在 Julia 中,我会写
X = reshape(collect(range(-5, stop=5, length=N)), :, 1);
size(X) ## (50, 1)
test = sum(X.^2, dims=2) + vec(sum(X.^2, dims=2));
size(test) ## (50, 1)
我试图思考一个 50x50 矩阵将如何成为添加两个向量的结果?我知道 numpy 在后台使用了很多广播,但我似乎不清楚这是做什么的。
numpy 在这里所做的事情的数学符号或 Julia 等价物是什么?
【问题讨论】:
-
numpy broadcasts。如果您不希望发生这种情况,请不要添加大小为
1的悬空维度 -
另外,求和然后再整形根本不会改变数据,所以你为什么要这样做令人困惑。
-
我也觉得很困惑。我正在关注此处找到的 GP 教程:katbailey.github.io/post/gaussian-processes-for-dummies 我想在 Julia 中重新创建它,但同时也试图理解数学。
-
结构过于复杂。只需写
X = range(-5, 5, length=N)。不需要collect和reshape。
标签: arrays numpy matrix julia linear-algebra