这是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)
答案 0 :(得分:1)
尝试以下两行解决方案:
distance = np.abs(sample - new_matrix[:,:,np.newaxis])
np.sum(distance < R, axis = -1)
说明:
通过使用new_matrix
numpy向np.newaxis
添加一个维度,可以使用sample
操作计算-
中每个矩阵的差。
然后distance < R
的计算方式与您的代码相同。 True
和False
在python中分别表示为1
和0
,这就是为什么可以沿右轴将它们简单地添加在一起的原因。