Numpy - 将x,y坐标的二维数组转换为坐标之间距离的平面数组

时间:2016-11-30 16:10:09

标签: python performance numpy

我想使用numpy将x,y坐标的2D数组转换为前一个坐标之间每个坐标距离的平面数组。请注意,第一对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数组来执行与此功能相同的操作?

1 个答案:

答案 0 :(得分: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()))