将 X,Y,Z 列表简化为 X,Y 列表,并检索 XY PTS 的最小和最大 X



我有大量XYZ数据集,我只需要提取XY作为PTS,并找到最小值和最大值。真正的数据集是浮点。。。(我仍然很难理解列表的理解…(这是Ascii网格文件更大问题的一部分,我正试图通过创建更大的XYZ数据集来解决。。。(我知道这是一种糟糕的方法…(

# I have got this... xyz data...
PTSXYZ = [[1,1,3],[4,4,2],[6,4,1],[6,6,5]]
# I want to get this....xy data   PTSXY = [[1,1],[4,4],[6,4],[6,6]]
# I have Tried.... this ??
PTSXY = [PTSXYZ[0][i],PTSXYZ[1][i] for i in PTSXYZ] # Addressing Wrong ?
#Then If I want the Minimum & Maximum  X Values..
print min(PTSXY[:][0]),max(PTSXY[:][0])

检索XY切片

为了从XYZ矩阵检索XY矩阵,您可以继续切片:

import numpy as np
a = np.array([[1, 1, 3], [4, 4, 2], [6, 4, 1], [6, 6, 5]])
a[:, :2]

其输出为:

array([[1, 1],
[4, 4],
[6, 4],
[6, 6]])

从x中检索最大值和最小值

然后,为了检索X的最小值和最大值,可以使用numpy.minnumpy.max:

_max, _min = np.max(a[:, 0]), np.min(a[:, 0])

获取:

6, 1

numpy效率与列表理解有何不同

让我们运行一个测试,看看numpy和使用numpy:的列表理解之间的区别

import numpy as np
a = np.random.randint(1000, size=(1000, 3))
%timeit [[i[0], i[1]] for i in a]
>>> 483 µs ± 10.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit a[:,:2]
>>> 391 ns ± 6.29 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

不出所料,numpy的速度快得惊人。

对于您的第一个问题,您可以使用列表理解根据PTSXYZ:的前两个元素创建一个新列表

PTSXY = [i[:2] for i in PTSXYZ]
print PTSXY
# [[1, 1], [4, 4], [6, 4], [6, 6]]

您可能还想考虑一个生成器,它不会将整个列表存储在内存中:

PTSXY = (i[:2] for i in PTSXYZ)

对于第二个问题,您可以通过创建一个X元素列表并获取它们的最小值和最大值来获得最小值和最小值:

print min(i[0] for i in PTSXY)
# 1
print max(i[0] for i in PTSXY)
# 6

一旦你得到@101解释的XY列表,你就可以用类似的方式得到最小值和最大值:

PTSXY = [[i[0], i[1]] for i in PTSXYZ]
minimum = min([i[0] for i in PTSXY])
maximum = max([i[0] for i in PTSXY])

最新更新