我有大量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.min
和numpy.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])