发布于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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!