Предположим, что необходимо вычислить свертку общего числа дискретных функций плотности вероятности. Для приведенного ниже примера есть четыре распределения, которые принимают значения 0,1,2 с указанными вероятностями:
import numpy as np
pdfs = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1],[0.3,0.7,0.0],[1.0,0.0,0.0]])
Свертку можно найти так:
pdf = pdfs[0]
for i in range(1,pdfs.shape[0]):
pdf = np.convolve(pdfs[i], pdf)
Тогда вероятности увидеть 0,1,...,8 равны
array([ 0.09 , 0.327, 0.342, 0.182, 0.052, 0.007, 0. , 0. , 0. ])
Эта часть является узким местом в моем коде, и кажется, что должно быть что-то доступное для векторизации этой операции. Есть ли у кого-нибудь предложения по ускорению?
В качестве альтернативы решение, в котором вы могли бы использовать
pdf1 = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1]])
pdf2 = np.array([[0.3,0.7,0.0],[1.0,0.0,0.0]])
convolve(pd1,pd2)
и получить попарные свертки
array([[ 0.18, 0.51, 0.24, 0.07, 0. ],
[ 0.5, 0.4, 0.1, 0. , 0. ]])
тоже бы здорово помог.
np.convolve
могут быть только одномерными. Так что, я думаю, здесь не так много векторизации. Но, может быть, стоит использовать другую свертку, например, основанную на scipy fft? docs.scipy.org/doc/scipy/reference/ сгенерировано/ - person SmCaterpillar   schedule 06.03.2015pdfs
? - person Mark Dickinson   schedule 24.03.2015