Умная индексация с использованием NumPy - PullRequest
0 голосов
/ 02 января 2019

Итак, это больше похоже на структурную проблему, но я думаю, что сейчас это выглядит ужасно, у меня есть код, похожий на:

for i in range(length_of_tree):
    potential_ways = np.zeros((M, 2))
    for m in range(omega):
        for s in range(Z):
            potential_ways[m][s] = sum([quad[r][m][s] for r in range(reps)])

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

1 Ответ

0 голосов
/ 03 января 2019

Сумма по значениям в массиве всегда может быть преобразована во внутренний продукт, который оптимизирован для numpy. Как было предложено здесь, я не совсем понимаю контекст вашего вопроса без примеров, но вы должны быть в состоянии сделать что-то вроде следующего:

np.random.seed(1)

# your examples
M = 2
length_of_tree,reps = 100,100
omega,Z = 2,2
# a random matrix of values of shape 100,2,2
quad = np.random.normal(0,1,size=(100,2,2))

# useful initializations
quadT = quad.T
dummy = np.ones(shape=(100,))

for i in range(length_of_tree):

    # option 1
    potential_ways = np.zeros((M, 2))
    for m in range(omega):
        for s in range(Z):
            potential_ways[m][s] = sum([quad[r][m][s] for r in range(reps)])

    # option 2
    potential_ways = quadT.dot(dummy).T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...