如何将python的map函数应用于多维数组
我有一个包含经度和纬度的数组,格式是这样的:
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中,map
和zip
都会返回生成器,你需要明确地转换它们,才能得到真正的列表(比如用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对象”)——不过根据你想要做的事情,这可能是个好处。