Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个更聪明的&;在python中将numpy ndarray转换为字符串的更快方法_Python_String_Numpy_Multidimensional Array - Fatal编程技术网

一个更聪明的&;在python中将numpy ndarray转换为字符串的更快方法

一个更聪明的&;在python中将numpy ndarray转换为字符串的更快方法,python,string,numpy,multidimensional-array,Python,String,Numpy,Multidimensional Array,我将矩形的地理坐标表示为numpy ndarray,如下所示: (每行对应一个矩形,每列包含其左下和右上经纬度) 排列([ 我想调用一个坐标转换API,其输入为如下字符串: 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], l

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

排列([

我想调用一个坐标转换API,其输入为如下字符串:

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 + ';'
‘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 + ';'
输出如下:

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.22143253,39.9064381271’


我想知道是否有一种更聪明、更快的方法可以实现这一点,而无需迭代(或者我可以参考一些有用的文档)?

让我们尝试使用函数式:

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] 

您也可以这样做:
coords=';'.join(','.join((i,j))在我的_矩形中为i,j。astype(str)。重塑(-1,2))
有效~~谢谢你:)函数样式看起来确实更聪明、更优雅~但是,我需要的是一个字符串,它包含列表中由“;”链接的所有元素,而不是列表本身,因此似乎我必须在另一次迭代中对所有元素求和?(如果我错了,请纠正我~)是的,你是对的。我编辑了我的答案,以符合你的需要。我知道有一种方法可以更方便地转换它并使用Functional样式,但我现在不记得了。我会检查这个!它应该是“;”。join(asString)是的,你是对的!;)我会删除答案中无用的部分^^