给定一个点数组
points = np.array([[1,1,1], [0,1,1], [1,0,0], [1,1,1]])
创建一个计算坐标的数组,表示:
r = [[0,0], [[1,0],
[0,1]], [0,2]]
这意味着坐标[1,1,1]
存在两次,因此在位置[1,1,1]
处,在结果阵列中存在2
。
在普通的python中,这将是:
for p in points:
r[p[0]][p[1]][p[2]] += 1
我需要在一个实时应用程序的上下文中,有高达300k点每帧和一个高达400x400x400的矩阵形状,所以速度是重要的。点的数量和形状的结果矩阵动态变化。
我是numpy的新手,还没有找到一种有效的方法来做到这一点,用普通的python for循环来做太慢了,每帧需要一秒钟。
2条答案
按热度按时间myzjeezk1#
请考虑以下几点。
(* 注:* 上面最后一行相当于
r[unique[:,0],unique[:,1],unique[:,2]] = counts
)。结果数组r:
rkkpypqq2#
可以使用
np.ravel_multi_index
将3D坐标分解为1D偏移,并使用np.bincount
计算这些偏移。产出