Как мне использовать 2-й логический массив для выбора из 1-го массива для каждой строки в numpy? - PullRequest
1 голос
/ 14 января 2009

Позвольте мне проиллюстрировать этот вопрос на примере:

import numpy

matrix = numpy.identity(5, dtype=bool) #Using identity as a convenient way to create an array with the invariant that there will only be one True value per row, the solution should apply to any array with this invariant
base = numpy.arange(5,30,5) #This could be any 1-d array, provided its length is the same as the length of axis=1 of matrix from above

result = numpy.array([ base[line] for line in matrix ])

result теперь содержит желаемый результат, но я уверен, что для этого существует специфический для numpy метод, позволяющий избежать явной итерации. Что это?

Ответы [ 3 ]

1 голос
/ 14 января 2009

Если я правильно понимаю ваш вопрос, вы можете просто использовать матричное умножение:

result = numpy.dot(matrix, base)

Если результат должен иметь ту же форму, что и в вашем примере, просто добавьте форму:

result = numpy.dot(matrix, base).reshape((5,1))

Если матрица не симметрична, следите за порядком в точках.

0 голосов
/ 15 января 2009

Моя попытка:

numpy.sum(matrix * base, axis=1)
0 голосов
/ 14 января 2009

Вот еще один уродливый способ сделать это:

n.apply_along_axis(base.__getitem__, 0, matrix).reshape((5,1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...