程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

使用 NumPy 中的最大采样优化点云到体素网格

发布于2024-11-25 16:40     阅读(619)     评论(0)     点赞(15)     收藏(3)


我有两个数组,分别表示点坐标和值。为了从这个点云中最大程度地采样,我正在初始化具有所需大小的网格,并循环遍历每个点以分配最大值:

N = 1000000
coords = np.random.randint(0, 256, size=(N, 3))
vals = np.random.rand(N, 3)

grid = np.zeros((3, 256, 256, 256), dtype=np.float16)
for i, pt in enumerate(coords):
    x, y, z = pt

    grid[0, x, y, z] = max(grid[0, x, y, z], vals[i, 0])
    grid[1, x, y, z] = max(grid[1, x, y, z], vals[i, 1])
    grid[2, x, y, z] = max(grid[2, x, y, z], vals[i, 2])

有没有办法可以通过 NumPy 做到这一点,而不需要 for 循环(这非常慢)?


解决方案


np.maximum.at可用于max在特定索引处执行操作。

例如,如果我们有两个数组arr1并且arr2要比较一个indices数组,我们可以这样做:

arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([10, 1, 8, 7, 3])
indices = np.array([0, 1, 2, 1, 4])

# Perform in-place maximum update
np.maximum.at(arr1, indices, arr2)

print(arr1)
# Output: [10  7  8  4  5]

所以我相信你的情况,你可以做这样的事情:

indices = coords[:, 0], coords[:, 1], coords[:, 2]

np.maximum.at(grid[0], indices, vals[:, 0])
np.maximum.at(grid[1], indices, vals[:, 1])
np.maximum.at(grid[2], indices, vals[:, 2])


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2045891/0a3336a16be1c38f5a63/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

15 0
收藏该文
已收藏

评论内容:(最多支持255个字符)