Python 多元幂级数Cauchy积的任意维NumPy数组卷积

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-ndarray表示的多元有限幂级数(即多项式)的计算
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)))))