Python 如何使用numpy加快for循环代码的速度

Python 如何使用numpy加快for循环代码的速度,python,performance,numpy,opencv,for-loop,Python,Performance,Numpy,Opencv,For Loop,我想让我的成像处理代码更快 任务 准备2张图像(img_kido_dx、img_kido_dy) 准备2个渐变光(Rpg_grad_p,Rpg_grad_q) 计算2x2矩阵H,该矩阵在每个像素处都有一些信息 **算法** matE=[[E_x1,E_x2,…E_xn],[E_y1,E_y2,…E_yn]] matR=[[R_p1,R_p2,…R_pn],[R_q1,R_q2,…R_qn]] matM=库存(matR) 数学=matE x matM 我试图用for循环编写代

我想让我的成像处理代码更快

任务

  • 准备2张图像(img_kido_dx、img_kido_dy)

  • 准备2个渐变光(Rpg_grad_p,Rpg_grad_q)

  • 计算2x2矩阵H,该矩阵在每个像素处都有一些信息

**算法**

  • matE=[[E_x1,E_x2,…E_xn],[E_y1,E_y2,…E_yn]]

  • matR=[[R_p1,R_p2,…R_pn],[R_q1,R_q2,…R_qn]]

  • matM=库存(matR)

  • 数学=matE x matM

我试图用for循环编写代码。但是太慢了。花了30多秒

您能告诉我如何使用NumPy和其他方法使其更快吗

谢谢

import numpy as np

N_ROW = 1080
N_COL = 1920
N_light = 20


img_kido_dx = np.empty((N_ROW * N_COL, N_light)) 
img_kido_dy = np.empty((N_ROW * N_COL,N_light))
Rpq_grad_p = np.empty((N_ROW  * N_COL,N_light))
Rpq_grad_q = np.empty((N_ROW * N_COL,N_light))



for i in range(N_ROW * N_COL):

    mat_E = np.array([img_kido_dx[i, :], img_kido_dy[i, :]])
    mat_R = np.array([Rpq_grad_p[i, :], Rpq_grad_q[i, :]])

    mat_M = np.linalg.pinv(mat_R)

    mat_H = np.matmul(mat_E, mat_M)

您包含打字错误——您定义变量
Rpg\u grad\u p
Rpg\u grad\u q
,然后稍后引用变量
Rpq\u grad\u p
Rpq\u grad\u q
(注意第三个字符-
g
q
)谢谢。我纠正了拼写错误。Rpq是正确的。如果你至少有numpy 1.14,那么你可以在矩阵堆栈上工作。i、 你可以给它一个数组的形状
(N\u行*N列,2,20)
。也适用于堆栈。然后再进行整形可以制作这样的堆栈。(注:在你更正之前写的,所以我选择了Rpg)。非常感谢!你的代码比原来的代码快20多倍。