将 for 循环从 matlab 转换为 python

计算科学 matlab Python 麻木的
2021-12-28 04:48:19

我正在将一些 MATLAB 代码转换为 python 并遇到错误“ValueError Traceback (last recent call last) in 1 for ig in range(nbas): ----> 2 psi[:,ig] = np.polyval (np.array(pp[ig,:ig]),节点)

ValueError: could not broadcast input array from shape (56,1) into shape (56) “我找不到以下代码的问题:

import numpy as np
import scipy.special as scl

##basis parameters (nbas<ngrid+1)
nbas = 54 #Basis set size in one dimension
ngrid = 56 #quadrature size

#Gauss-Hermite-Quadrature
#Hermite matrix
def hermipol(n):
    p = np.zeros((n+1,n+1))
    p[0][0] = 1
    if n == 0:
        p = np.array([[1,0],[2,0]], dtype = float)
    if n > 0:
        p[1][range(0,2)] = np.array([2,0])
        if n >=1:
            for k in range(2,n+1):
                p[k][range(n)] = 2*p[k-1][range(0,n)]
                p[k][range(2,n+1)] += -2*(k-1)*p[k-2][range(0,n-1)]
    for i in range(0,n+1):
        p[i,:] /= np.sqrt(np.sqrt(np.pi)*2**(i)*scl.factorial(i))

    return(p)
#Generation Gauss-Hermite Quadrature nodes and weights
def ghquad(n):
    return(np.polynomial.hermite.hermgauss(n))
[nodes,weights]  = ghquad(ngrid)

pp = hermipol(ngrid)


#Evaluation and store psi_i()(x,y)_k)
nodes = np.array([nodes]).T
weights = np.array([weights]).T
print(weights)
print(nodes)
np.shape(nodes)
psi = np.zeros((ngrid,nbas))
np.shape(psi)

for ig in range(nbas):
    psi[:,ig] = np.polyval(np.array(pp[ig,:ig]),nodes)

任何指导将不胜感激。

谢谢!

1个回答

我认为这篇文章更适合 Stackoverflow。psi[:,ig]无论如何,您可以通过更改为来简单地解决您的问题psi[:,ig:ig+1]那么左边真的是一个 nx1 矩阵,而不仅仅是一个大小为 n 的向量。

或者您可以删除nodes = np.array([nodes]).T此处无用的行,并导致 Numpy 将数组“节点”(大小 n)转换为 1xn 数组。然后是原作psi[:,ig]

这种形状问题应该很容易手动调试!