Python 如何从(1000,1)和(n)个值创建(1000,500)数组?

Python 如何从(1000,1)和(n)个值创建(1000,500)数组?,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,我需要将变量phi、En和Cn放入适当大小的数组中。我能够在Matlab中成功地做到这一点,因为从Matlab到python的转换是困难的。我该怎么计算呢。当n=1时,我需要将x的整个数组相乘,当n=2时,再次相乘,…,n=500,得到En和Cn的正确大小的数组 def Gaussan_wave_packet(): quantum_number = 500 x = np.linspace(0,100,1000).astype(complex) x0 = 50, a =

我需要将变量phi、En和Cn放入适当大小的数组中。我能够在Matlab中成功地做到这一点,因为从Matlab到python的转换是困难的。我该怎么计算呢。当n=1时,我需要将x的整个数组相乘,当n=2时,再次相乘,…,n=500,得到En和Cn的正确大小的数组

def Gaussan_wave_packet():

    quantum_number = 500
    x = np.linspace(0,100,1000).astype(complex)
    x0 = 50, a = 10, l = 1
    A = (1/(4*a**2))**(1/4.0)
    m = 0.511*10**6 #mass
    hbar = 6.58211951*10**(-16)
    L = x[-1]

    #Gaussian wave packet
    psi_x0 = np.exp((-(x - x0)**2)/(4*a**2))*np.exp(1j*l*x)

    #Normalize wave function
    A = (1/(np.sqrt(np.trapz((np.conj(psi_x0)*psi_x0),x))))
    psi_x0_normalized = np.outer(psi_x0,A) # Makes a (1000,1) array

    phi_result  = np.array([])
    En_result = np.array([])
    Cn_result = np.array([])

    for n in range(0,quantum_number):

        phi = ( np.sqrt( 2/L ) * np.sin( ( n * x * np.pi )/L ) ) # Needs to be (1000,500)
        En = ( ( np.power(n,2))*(np.pi**2)*(hbar**2))/(2*m*L**2) # Needs to be (1,500)
        Cn = np.trapz( ( np.conj(phi) * psi_x0_normalized ), x ) # Needs to be (1,500)

可以将元素相乘与
np一起使用。乘法(a,b)
。 并重塑
x
,以使用隐式扩展并避免for循环:

n = np.arange(quantum_number)
phi =  np.sqrt(2/L) * np.sin((np.multiply(n,x.reshape(1000,1)*np.pi)/L ))
您可以对
En
Cn
应用相同的逻辑

matlab等效物为:

n = 0:(quantum_number-1);
phi = (2/L)^0.5*sin(n.*x.'*pi/L);

成功了,谢谢!然而,我仍然无法理解Cn是如何工作的。我得到了这个错误:Cn=np.trapz((np.multiply(np.conj(phi),psi_x0_normalized)),x.reformate(len(x),1))#需要是(1500)文件“/usr/local/lib/python3.7/site packages/numpy/lib/function_base.py”,第3890行,在trapz ret=add.reduce(d*(y[tuple(slice1)]+y[tuple(slice2)]/2.0,axis)中)ValueError:操作数无法与形状(1000,0)(1000499)一起广播。从这条线开始:Cn=np.trapz((np.multiply(np.conj(phi),psi_x0_归一化)),x.reformate(len(x),1))。我相信这和特拉普有关。