首页 > 解决方案 > 如何使用 numpy vectorize 遍历二维向量?

问题描述

我正在尝试使用 numpy.vectorize 迭代一个 (2x5) 矩阵,该矩阵包含两个向量,表示坐标的 x 和 y 值。坐标(x 和 y 值)将被馈送到为每次迭代返回 (1x1) 向量的函数。所以最后,结果应该是一个 (1x5) 向量。我的问题是,不是遍历每个元素,而是希望算法同时遍历两个向量,因此它并行获取坐标的 x 和 y 值以将其提供给函数。

data = np.transpose(np.array([[1, 2], [1, 3], [2, 1], [1, -1], [2, -1]]))
th_ = np.array([[1, 1]])
th0_ = -2

def positive(x, th = th_, th0 = th0_):
    if signed_dist(x, th, th0)[0][0] > 0:
        return np.array([[1]])
    elif signed_dist(x, th, th0)[0][0] == 0:
        return np.array([[0]])
    else:
        return np.array([[-1]])
positive_numpy = np.vectorize(positive)
results = positive_numpy(data)

阅读 numpy 文档并没有真正帮助,我想避免大的变通方法有利于计算时间。感谢您的任何建议!

标签: pythonnumpymatrixvectorcoordinates

解决方案


这有点猜测,但看起来您的代码可以简化为

data = np.array([[1, 2], [1, 3], [2, 1], [1, -1], [2, -1]])  # (5,2) array
th_ = np.array([[1, 1]])
th0_ = -2
alist = [signed_dist(x, th_, th0_) for x in data]
arr = np.array(alist)    # (5,?,?) array
arr = arr[:,0,0]   # (5,) array
arr[arr>0] = 1

推荐阅读