W是一个矩阵,有V行。u是一个向量。我有两个裸体W和u
import numpy as np
import numpy.random as npr
V = 10
W = npr.normal(size=(V, 3))
u = npr.normal(size=(1,3))
如果我逐行计算,我可以这样做:
^{pr2}$但一旦V变大(比如5000),它可能会很慢,我需要一次又一次地重新计算。 所以我尝试了矩阵乘法,但是没有成功,因为它不是一个逐行的乘法。在
((W - u).transpose()).dot(W - u)
我怎样才能快速计算出平方范数?在
我计划使用Cython,那么循环中的逐行乘法会比Numpy快吗?我了解到Cython有parallelization,但是如果我在里面使用Numpy对象,Cython似乎不能并行化{prange
内使用Python对象,但我可以使用Numpy对象)。在
方法1
您可以利用基于fastblas的^{} 与NumPy一起使用,而无需任何循环,如下-
引入^{} 来获得}的
^{pr2}$W
和{u
-方法说明
在每次迭代中使用
(W[v] - u).dot((W[v] - u)
,我们正在做内点积。因为,我们对W
的所有行执行此操作,这在利用广播时转换为((W - u)**2).sum(1)
。在现在
因此
RHS的最后一个术语基本上是矩阵乘法,我们用
np.dot
来利用它。在方法2
或者,使用更多的
np.einsum
,应该是这样-相关问题 更多 >
编程相关推荐