【发布时间】:2020-04-25 16:00:33
【问题描述】:
我是 Python 新手,我有一个关于加快 for 循环的问题。
让“u”是一个维数为 (N,K) 的 numpy 数组,让“kernel_vect”是一个维数为 (K,) 的 numpy 数组,这两个数组都是 float64 数字。 我想加快以下代码的速度(例如通过消除 for 循环)
Kernel_appo = np.zeros((N**2,))
for k in range(K):
uk = u[:,k]
Mat_appo = np.outer(uk,uk)
Kernel_appo = Kernel_appo + kernel_vect[k] * routines.vec(Mat_appo)
有什么想法吗?谢谢!
【问题讨论】:
-
routines.vec应该做什么?N和K的典型值是什么? -
啊,对不起! routine.vec 将矩阵的列堆叠成一个数组(逐列)。 N 小(小于 100),K 大一个数量级或更多
-
好的。当您说它“堆叠列”时,这意味着对于矩阵
[[0, 1], [2, 3]](行主要),结果将是[0, 2, 1, 3],不是吗?如果没有,你能把这个函数的代码写短吗? -
是的,完全正确。我只是在使用这个函数,基本上是“np.ravel(x, order='F')”
标签: python python-3.x performance for-loop