如何将Python的map函数应用于多维数组

3

我有一个经纬度数组,格式如下:

coord = [[lat1,long2],[lat2,long2],...,[latn,longn]]

我希望能够将它们从度数转换为弧度,并创建两个数组,一个包含经度,一个包含纬度。为了做到这一点,我想使用map函数来避免for循环,我想要做类似于以下的操作:

lat_ = map(radians,coords[_][0])

_是变化的索引。


我想看看最新的Python是否有比下面列出的答案更好的方法? - Leothorn
2个回答

2

虽然我通常会像Karl的答案一样使用列表推导,但你特别问到如何使用map来实现。简单的方法是使用lambda:

lat_ = map(lambda i:radians(i[0]), l)
lon_ = map(lambda i:radians(i[1]), l)

请注意,使用Python 3.x将会得到一个生成器(具体来说是“map对象”)-但根据您想要做什么,这可能是一个优势。

我在回答中故意避免使用map来给出直接的解决方案,但是我想提到lambda可能更礼貌一些。 :) - Karl Knechtel
@KarlKnechtel 很难把握给予太多和太少之间的平衡。 - neil

1

通常在Python中,我们使用列表推导式来实现这个:

lats = [radians(coord[0]) for coord in coords]
longs = [radians(coord[1]) for coord in coords]

要将其转换为map语言,您需要一个封装radians(coord[0])操作的函数。
或者,您可以首先准备纬度和经度的度数列表。内置函数zip可以做到这一点(zip(*coords),因为每个被一起压缩的列表都是函数的参数)。
请记住,在3.x中,mapzip都将返回生成器,您需要显式转换它们才能获得实际的列表(例如list(map(...)))。
但是,认真使用列表推导式。它们是标准惯用语,更加清晰明了-它们使用方括号来表示正在创建列表,然后在其中以输入数据为基础实际描述列表内容。没有比这更简单或更清晰的了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接