【问题标题】:A smarter & faster way to convert numpy ndarray to string in python在 python 中将 numpy ndarray 转换为字符串的更智能、更快捷的方法
【发布时间】:2014-12-07 17:33:52
【问题描述】:

我的矩形地理坐标表示为 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.1722658863299888639.925323188,216.21798048,39.903738188,216.207497213,39.9037381271,216.21798048,39.903738127139.906438127139.90373818,39.9037346711,219.903734671,39.9037346718,39。

我想知道是否存在一种更智能、更快速的方法来实现这一点而无需迭代(或一些我可以参考的有用文档)?

【问题讨论】:

  • 你也可以这样做:coords = ';'.join(','.join((i, j)) for i,j in my_rectangle.astype(str).reshape(-1, 2))
  • 它有效~~谢谢你:)

标签: python string numpy multidimensional-array


【解决方案1】:

让我们尝试使用函数式样式:

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 对可迭代对象的每个元素应用一个函数。因此,您定义了应用于一个元素的过程,然后使用 map 将每个元素替换为其结果。

希望你发现它更聪明 ;)

编辑: 你也可以这样写:

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

【讨论】:

  • 机能风格确实看起来更灵动优雅~
  • 但是,我需要的是一个包含由 ';' 链接的列表中所有元素的字符串,而不是列表本身,所以看起来我必须将 asString 中的所有元素与另一个迭代相加? (有错请指正~)
  • 是的,你是对的。我编辑了我的答案以符合您的需要。我知道有一种方法可以更方便地转换它并使用功能样式,但我现在不记得了。会检查这个!
  • 应该是';'.join(asString)
  • 是的,你是对的! ;) 我将删除答案中无用的部分^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2011-01-30
  • 2016-06-06
  • 2016-01-07
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多