我填充矩阵K
,其中每个条目都是一个函数,使用双for循环应用于数组x
的两个条目:
K = np.zeros((x.shape[0],x.shape[0]), dtype=np.float32)
for i in range(x.shape[0]):
for j in range(x.shape[0]):
K[i,j] = f(x[i],x[j])
矩阵是10,000乘10,000,需要很长时间来计算。有没有更有效的方法来使用NumPy?该函数是一个高斯核:
def gaussian(a,b,sigma):
vec = a-b
return np.exp(- np.dot(vec,vec)/(2*sigma**2))
我在计算之前设置了sigma
。数组x
的形状是(10000,8),因此高斯中的标量积是两个8维向量之间的积。
1条答案
按热度按时间o7jaxewo1#
您可以使用一个
for
循环与广播。这需要更改gaussian
函数的实现以接受2D输入:从理论上讲,即使没有任何
for
循环,也可以通过使用广播来实现这一点,但是这里将创建一个大小为len(x)**2 * x.shape[1]
的中间数组,它可能会耗尽您的数组大小的内存: