【问题标题】:Numpy - transform 2D array of x,y coordinates into flat array of distance between coordinatesNumpy - 将 x,y 坐标的二维数组转换为坐标之间距离的平面数组
【发布时间】:2016-11-30 16:10:09
【问题描述】:

我想使用 numpy 将 x,y 坐标的二维数组转换为前一个坐标之间距离的平面数组。请注意,第一对 x/y 坐标应保留在输出数组中,作为稍后重建坐标的参考。

此过程的目的是减小数组的大小以提高网络上的共享速度。

例如:

input = [[-8081441,5685214], [-8081446,5685216], [-8081442,5685219], [-8081440,5685211], [-8081441,5685214]]
output = [-8081441, 5685214, 5, -2, -4, -3, -2, 8, 1, -3]

def parseCoords(coords):
    #keep the first x,y coordinates
    parsed = [int(coords[0][0]), int(coords[0][1])]
    for i in xrange(1, len(coords)):
        parsed.extend([int(coords[i-1][0]) - int(coords[i][0]), int(coords[i-1][1]) - int(coords[i][1])])
    return parsed

parsedCoords = parseCoords(input)

为了提高性能,是否可以使用 numpy 数组来执行与此函数相同的操作?

【问题讨论】:

    标签: python performance numpy


    【解决方案1】:

    首先,为了性能,如果列表输入不是数组,我们将其转换为数组,就像这样 -

    arr = np.asarray(input).astype(int)
    

    现在,我们将采用np.diff 的一种方法 -

    np.hstack((arr[0], (-np.diff(arr, axis=0)).ravel()))
    

    slicing 的另一种方法来复制差异化 -

    np.hstack((arr[0], (arr[:-1,:] - arr[1:,:]).ravel()))
    

    【讨论】:

    • 是否可以将所有坐标转换为整数?
    • @BelowtheRadar 试试:arr = np.asarray(input).astype(int)?
    • 非常感谢,我是 numpy 的新手!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多