加速复杂的Numpy矩阵乘法(点云)

加速复杂的Numpy矩阵乘法(点云),numpy,Numpy,我有大约200个3D点,我需要将它们乘以一个相当复杂的2D投影矩阵。我目前正在使用numpy和for循环,基本上是通过3D点云进行迭代,应用矩阵变换并获取数据 这似乎相当缓慢。有没有什么方法可以让我将其矢量化,或者使用某种加速技术(地图、池等) 类似上面的东西。我需要在每帧200个点上重复这个3*3/4*4乘法告诉我们到目前为止您已经添加了什么。基本上如上所述。我需要乘以4x4矩阵,其中(FVehicleRPYSonarToCamera*SpaceMatrix;)。我需要为我的每个3D点做这个,

我有大约200个3D点,我需要将它们乘以一个相当复杂的2D投影矩阵。我目前正在使用numpy和for循环,基本上是通过3D点云进行迭代,应用矩阵变换并获取数据

这似乎相当缓慢。有没有什么方法可以让我将其矢量化,或者使用某种加速技术(地图、池等)


类似上面的东西。我需要在每帧200个点上重复这个3*3/4*4乘法

告诉我们到目前为止您已经添加了什么。基本上如上所述。我需要乘以4x4矩阵,其中(FVehicleRPYSonarToCamera*SpaceMatrix;)。我需要为我的每个3D点做这个,所以我有一个大的for循环,包含上面的函数。你能发布一个工作示例吗?我不知道变量的大小。例如使用随机变量。显式编写循环会很好。还可以分析代码,看看哪部分花费的时间最多。
np。矩阵总是二维的
np.dot
np.array
执行相同的矩阵乘法。它也适用于二维阵列。但是
tensordot
einsum
可以在高维数组上进行这种乘法。将
/
扩展到更高的维度可能更棘手。
    F = matrix([
        [735.4809,  0.,         388.9476,   0.],
        [0.,        733.6047,   292.0895,   0.],
        [0.,        0.,         1.0000,     0.]
    ])
    VehicleRPY = self.GetRT(Roll=Roll, Pitch=Pitch, Yaw=0., X=IMUX, Y=IMUY, Z=IMUZ);
    SonarToCamera = self.GetRT(Roll=RTRoll, Pitch=RTPitch, Yaw=RTYaw, X=RTX, Y=RTY, Z=RTZ);
    SpaceMatrix = matrix([
        [(sqrt(R**2 - (Y/(cosd(Roll)*cosd(Pitch)))**2)*sind(Theta))],
        [(Y/(cosd(Roll)*cosd(Pitch)))],
        [(sqrt(R**2 - (Y/(cosd(Roll)*cosd(Pitch)))**2)*cosd(Theta))],
        [1]
    ])
    FinalMatrix = F*VehicleRPY*SonarToCamera*SpaceMatrix;
    UVMatrix = matrix([
        [FinalMatrix.item(0)/FinalMatrix.item(2)],
        [FinalMatrix.item(1)/FinalMatrix.item(2)],
    ])