一个更智能的&更快的方式将numpy ndarray转换为python中的字符串

时间:2014-10-13 07:47:43

标签: python string numpy multidimensional-array

我的矩形地理坐标表示为numpy ndarray,如下所示: (每行对应一个矩形,每列包含其左下角和右上角经度和纬度)

  

阵列([

  [ 116.17265886,   39.92265886,  116.1761427 ,   39.92536232],

  [ 116.20749721,   39.90373467,  116.21098105,   39.90643813],

  [ 116.21794872,   39.90373467,  116.22143255,   39.90643813]])

我想调用坐标转换API,其输入是这样的字符串:

  

'lon_0,lat_0; lon_1,lat_1; lon_2,lat_2; ...; lon_n,lat_n'

所以我编写了一个愚蠢的迭代来将我的ndarray转换为所需的字符串,如下所示:

coords = ''
for i in range(0, my_rectangle.shape[0]):
    coords = coords + '{left_lon},{left_lat};{right_lon},{rigth_lat}'.format(left_lon = my_rectangle[i][0], left_lat = my_rectangle[i][1], \
                                                               right_lon = my_rectangle[i][2], rigth_lat = my_rectangle[i][3])
    if i != my_rectangle.shape[0] - 1:
        coords = coords + ';'

输出如下:

  

'116.172658863,39.9226588629; 116.176142698,39.9253623188; 116.207497213,39.9037346711; 116.210981048,39.9064381271; 116.217948718,39.9037346711; 116.221432553,39.9064381271'

我想知道是否存在更智能的&更快的方法实现这一点没有迭代(或我可以参考的一些有用的文档)?

1 个答案:

答案 0 :(得分:2)

让我们尝试使用功能样式:

values = [[ 116.17265886,   39.92265886,  116.1761427 ,   39.92536232],
          [ 116.20749721,   39.90373467,  116.21098105,   39.90643813],
          [ 116.21794872,   39.90373467,  116.22143255,   39.90643813]]

def prettyPrint(coords):
    return '{0},{1};{2},{3}'.format(coords[0], coords[1], coords[2], coords[3])

asString = formating(list(map(prettyPrint,values)))
print(";".join(asString)) #edited thanks to comments

map将函数应用于iterable的每个元素。因此,您定义要应用于一个元素的过程,然后使用map将每个元素替换为其结果。

希望你发现它更聪明;)

编辑: 您也可以这样写:

asString = [prettyPrint(value) for value in values]