gpt4 book ai didi

python - 从 Numpy 向量数组中删除重复项(在给定的公差范围内)

转载 作者:太空狗 更新时间:2023-10-30 01:30:36 25 4
gpt4 key购买 nike

我有一个 Nx5 数组,其中包含 N 个形式为“id”、“x”、“y”、“z”和“energy”的向量。我需要在 0.1 的公差范围内删除重复点(即 x、y、z 全部匹配的位置)。理想情况下,我可以创建一个函数,在其中传入数组、需要匹配的列和匹配的容差。

正在关注 this thread on Scipy-user ,我可以使用记录数组删除基于完整数组的重复项,但我只需要匹配数组的一部分。此外,这不会在一定的公差范围内匹配。

我可以在 Python 中使用 for 循环费力地迭代,但是有更好的 Numponic 方法吗?

最佳答案

你可能会看看 scipy.spatial.KDTree .N有多大?
添加:糟糕,tree.query_pairs 不在 scipy 0.7.1 中。

如有疑问,请使用蛮力:将空间(这里是 side^3)分成小单元格,每个单元格一分:

""" scatter points to little cells, 1 per cell """
from __future__ import division
import sys
import numpy as np

side = 100
npercell = 1 # 1: ~ 1/e empty
exec "\n".join( sys.argv[1:] ) # side= ...
N = side**3 * npercell
print "side: %d npercell: %d N: %d" % (side, npercell, N)
np.random.seed( 1 )
points = np.random.uniform( 0, side, size=(N,3) )

cells = np.zeros( (side,side,side), dtype=np.uint )
id = 1
for p in points.astype(int):
cells[tuple(p)] = id
id += 1

cells = cells.flatten()
# A C, an E-flat, and a G walk into a bar.
# The bartender says, "Sorry, but we don't serve minors."
nz = np.nonzero(cells)[0]
print "%d cells have points" % len(nz)
print "first few ids:", cells[nz][:10]

关于python - 从 Numpy 向量数组中删除重复项(在给定的公差范围内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com