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

3 投票
2 回答
6714 浏览
提问于 2025-04-18 13:40

我有一个包含经度和纬度的数组,格式是这样的:

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

我想把这些角度从度数转换成弧度,并创建两个数组,一个用来存放经度,另一个用来存放纬度。为了做到这一点,我想用 map 函数,这样就不用写 for 循环了。我想做的事情大概是这样的:

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

其中 _ 是变化的索引。

2 个回答

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),因为每个要合并的列表都是这个函数的一个参数)。

要注意的是,在Python 3.x中,mapzip都会返回生成器,你需要明确地转换它们,才能得到真正的列表(比如用list(map(...)))。

不过说真的,还是用列表推导式吧。它们是标准的写法,清晰明了——用方括号表示正在创建一个列表,中间是根据输入数据描述列表内容的实际表达。简单明了,没有比这更清楚的了。

2

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

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

需要注意的是,在Python 3.x中,这样做会得到一个生成器(具体来说是一个“map对象”)——不过根据你想要做的事情,这可能是个好处。

撰写回答