Как я могу использовать NumPy Vectorize, чтобы перебрать двумерный вектор? - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь использовать 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)

Чтение пустой документации не очень помогло, и я хочу избежать больших обходных путей в пользу расчета времени.Благодарен за любое предложение!

1 Ответ

0 голосов
/ 21 сентября 2018

Это немного догадка, но похоже, что ваш код может быть упрощен до

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
...