首页 > 解决方案 > 有没有办法优化矩阵与一组样本的比较?

问题描述

这是 3D 相机流式传输场景深度图的情况。相机的分辨率是已知的,等于 (w, h),在本例中设置为 (3, 2)。

我尝试将每个新框架与一袋样本进行比较。每个像素具有相同数量的要与之进行比较的样本,在本示例中,这些样本数量是已知的,等于 4。样本袋具有以下形状 (w, h, nb_sample),在此示例中等于 (3, 2, 4)。

我从 0 循环到 nb_sample 以将新帧与样本进行比较。如果差值高于阈值 R,则计数器增加。

问题是:有没有办法优化循环?

import numpy as np

w = 3
h = 2
nb_sample = 4
R = 0.5

new_matrix = np.random.rand(w,h)

sample = np.random.rand(w, h, nb_sample)

count = np.zeros((w,h))

for index in range(0, nb_sample):
    distance = np.abs(new_matrix - sample[:, :, index])
    count[distance < R] += 1

print(count)

标签: pythonnumpyoptimization

解决方案


试试这两条线的解决方案:

distance = np.abs(sample - new_matrix[:,:,np.newaxis])
np.sum(distance < R, axis = -1)

说明

通过添加一个维度到new_matrixnumpynp.newaxis可以计算每个矩阵在sample使用-操作中的差异。

然后distance < R像在您的代码中一样计算。True和在 pythonFalse中表示为10,这就是为什么它们可以简单地沿右轴相加。


推荐阅读