Python 多元幂级数Cauchy积的任意维NumPy数组卷积
我正试图实现我提出的想法,对于以NumPy-ndarray表示的多元有限幂级数(即多项式)的计算Python 多元幂级数Cauchy积的任意维NumPy数组卷积,python,arrays,numpy,convolution,polynomials,Python,Arrays,Numpy,Convolution,Polynomials,我正试图实现我提出的想法,对于以NumPy-ndarray表示的多元有限幂级数(即多项式)的计算numpy.convolve分别对1D数组执行此操作。但据我所知,没有实现任意维数组的卷积。在上面的链接中,我提出了以下等式: 对于形状p=[p1,…,pn]和形状Q=[q1,…,qn]的两个n维数组Phi的卷积,其中: omegas是形状O=P+Q-1 用于相同形状的任意维数组A和B A^F是在所有n方向上翻转的A {A}[k1,…,kn]是从[0,…,0]到[k1,…,kn] Psi'是用零扩展
numpy.convolve分别对1D数组执行此操作。但据我所知,没有实现任意维数组的卷积。在上面的链接中,我提出了以下等式:
对于形状p=[p1,…,pn]
和形状Q=[q1,…,qn]
的两个n
维数组Phi
的卷积,其中:
omega
s是形状O=P+Q-1
用于相同形状的任意维数组A
和B
A^F
是在所有n
方向上翻转的A
{A}[k1,…,kn]
是从[0,…,0]
到[k1,…,kn]
Psi'
是用零扩展的Psi
形状,如上文所定义
我试着一个接一个地实现上述功能:
import numpy as np
按照建议,切片/作物A
从D1
到D2
def sumall(A):
sum1=A
for k in range(A.ndim):
sum1 = np.sum(sum1,axis=0)
return sum1
是多维数组的numpy.sum
的推广
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,您能给出一些示例输入和所需的输出值吗?@NilsWerner我刚才看到您对的评论,我添加了一些描述,并将J
更改为K
,以符合原始公式。我检查了您的代码,并留下了一些评论。谢谢。请注意,这不是你应该问的问题。通常最好一次只问一个简明的问题,把你需要的一切都放在你的帖子里,而不是放在其他网站上,尽可能简单地描述问题,如果可能的话,创建一个没有太多优化的例子,并提供一些示例输入和所需的输出数据,提供可证明有效的MCVE(可能仅适用于1D或2D,并且尽可能简单,您的太复杂),提供输入和输出数据,并关注一个问题。
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)))))