【发布时间】:2015-01-27 04:35:06
【问题描述】:
对于那些可以阅读 Latex 的人,这是我想要计算的:
$$k_{xyi} = \sum_{j}\left ( \left ( x_{i}-x_{j} \right )^{2}+\left ( y_{i}-y_{j} \right )^{2} \right )$$
其中 x 和 y 是矩阵 A 的行。
对于只有计算机语言的人,这将翻译为: k(x,y,i) = sum_j( (xi - xj)^2 + (yi - yj)^2 ) 其中 x 和 y 是矩阵 A 的行。
所以 k 是一个 3d 矩阵。
这只能通过 API 调用来完成吗? (没有 for 循环)
这里是测试启动:
import numpy as np
A = np.random.rand(4,4)
k = np.empty((4,4,4))
for ix in range(4):
for iy in range(4):
x = A[ix,]
y = A[iy,]
sx = np.power(x - x[:,np.newaxis],2)
sy = np.power(y - y[:,np.newaxis],2)
k[ix,iy] = (sx + sy).sum(axis=1).T
现在对于编码大师,请将两个 for 循环替换为 numpy API 调用。
更新: 忘了说我需要一种节省 RAM 空间的方法,我的 A 矩阵通常是 20-30 千平方。因此,如果您的答案不会创建巨大的临时多维数组,那就太好了。
【问题讨论】:
标签: python numpy matrix multidimensional-array