В основном все вышеперечисленное: избавьтесь от сути, предоставьте MCVE, который доказуемо работает (возможно, только для 1D или 2D, и настолько прост, насколько это возможно, у вас слишком сложно), предоставьте входные и выходные данные и сфокусируйтесь на одном вопросе.
аюсь реализовать идею, которую я предложилВот, заПродукт Коши многомерных конечных степенных рядов (то есть многочленов), представленных в виде NumPy ndarrays.numpy.convolve
выполняет работу для одномерных массивов соответственно. Но, насколько мне известно, нет реализации свертки для произвольных размерных массивов. В приведенной выше ссылке я предложил уравнение:
для свертки двухn
размерные массивыPhi
формыP=[p1,...,pn]
а такжеPsi
формыQ=[q1,...,qn]
, где:
omega
s являются элементамиn
размерный массивOmega
формыO=P+Q-1
<A,B>_F
это обобщениеФробениус внутренний продукт для произвольных размерных массивовA
а такжеB
той же формыA^F
являетсяA
перевернул всеn
направления{A}_[k1,...,kn]
кусочекA
начиная с[0,...,0]
в[k1,...,kn]
Psi'
являетсяPsi
расширены нулями, чтобы иметь формуO
как определено вышеЯ попытался реализовать вышеупомянутые функции одну за другой:
import numpy as np
def crop(A,D1,D2):
return A[tuple(slice(D1[i], D2[i]) for i in range(D1.shape[0]))]
как было предложеноВот, ломтики / посевыA
изD1
вD2
,
def sumall(A):
sum1=A
for k in range(A.ndim):
sum1 = np.sum(sum1,axis=0)
return sum1
это обобщениеnumpy.sum
для многомерных ndarrays,
def flipall(A):
A1=A
for k in range(A.ndim):
A1=np.flip(A1,k)
return A1
переворачиваетсяA
это все существующие оси, и, наконец,
def conv(A,B,K):
D0=np.zeros(K.shape,dtype=K.dtype)
return sumall(np.multiply(crop(A,np.maximum(D0,np.minimum(A.shape,K-B.shape)) \
,np.minimum(A.shape,K)), \
flipall(crop(B,np.maximum(D0,np.minimum(B.shape,K-A.shape)) \
,np.minimum(B.shape,K)))))
гдеK=[k1,...,kn]
и для всех0<=kj<=oj
, является модифицированной версией формулы выше, которая только вычисляет ненулевые умножения, чтобы быть более эффективной. Сейчас я пытаюсь заселитьOmega
использование массиваfromfunction
или жеmeshgrid
в сочетании сvectorize
как предложеноВот, но я потерпел неудачу до сих пор. Теперь мои вопросы в порядке очередности:
Буду признателен, если вы поможете мне с этими вопросами. Заранее благодарны за Вашу помощь.
P.S.1 Вы можете найти некоторые примеры и другую информацию в этомGitHub Gist
P.S.2 Здесь, в списке рассылки AstroPy Мне сказали, чтоscipy.signal.convolve
и / илиscipy.ndimage.convolve
сделайте работу и для более высоких измерений. Также естьscipy.ndimage.filters.convolve
. Вот Я объяснил, почему они не то, что я ищу.