gpt4 book ai didi

Python:从具有相同 x 和 y 坐标的 X、Y、Z 文件中删除所有重复点的方法

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:59 25 4
gpt4 key购买 nike

我正在寻找一种从 X、Y、Z 文件中删除所有重复点的方法。我希望编码的是删除具有相同 x 和 y 坐标的点。第一个点保留下来,所有后续的重复项都被删除。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as ml
import matplotlib.delaunay
from matplotlib.mlab import griddata

# my area boundary box
xmax, xmin, ymax, ymin = 640000.06, 636999.83, 6070000.3, 6066999.86

# generate fake data
ndata = 500000
# Generate random data to simulate
x = np.random.randint(xmin, xmax, ndata)
y = np.random.randint(ymin, ymax, ndata)
z = np.random.randint(0,20,ndata)
mypoints = zip(x,y,z)

提前感谢您的帮助和提示!!!:)

最佳答案

当您寻求帮助和提示时:

我建议的第一件事是,你应该避免循环遍历 numpy 数组,因为这是低效的,而且 numpy 数组不是为此设计的。如果您使用的是 numpy 数组,则应使用矢量化 numpy 函数和索引对点进行排序并删除重复项。

Pandas (它建立在 numpy 之上)DataFrames 有一个内置的 drop_duplicates 方法,它应该比 C2H5OH 提议的通过遍历数组来获取你的点更快。

您可以使用 ipython 比较它们:

import pandas as pd
from collections import OrderedDict
from itertools import groupby

def with_ordered_dict(x, y, z):
tmp = OrderedDict()
for point in zip(x, y, z):
tmp.setdefault(point[:2], point)
return tmp.values()

def with_groupby(x, y, z):
keyfunc = lambda p: p[:2]
mypoints = []
for k, g in groupby(sorted(zip(x, y, z), key=keyfunc), keyfunc):
mypoints.append(list(g)[0])
return mypoints

def with_dataframe(x, y, z):
df = pd.DataFrame({'x':x, 'y':y, 'z':z})
return df.drop_duplicates(cols=['x', 'y'])

In [140]: %timeit mypoints = with_ordered_dict(x, y, z)
1 loops, best of 3: 2.47 s per loop

In [141]: %timeit mypoints = with_groupby(x, y, z)
1 loops, best of 3: 4.22 s per loop

In [142]: %timeit mypoints = with_dataframe(x, y, z)
1 loops, best of 3: 713 ms per loop

因此,对于 500000 个数据点,pandas 比使用 OrderedDict 快三到四倍,比使用 groupby 快大约六倍。

关于Python:从具有相同 x 和 y 坐标的 X、Y、Z 文件中删除所有重复点的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12698987/

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