Sebbek8
Sebbek8

Reputation: 15

Cannot change value of certain parts of array

Im trying to change the rows of an array with new values in a for loop, but cannot get it to work.

Problem is related to propagation of a wave packet in quantum physics.

Ive tried using the numpy.dot() function, but that doesnt work, and i tried making an easier for loop, that works.

import numpy as np

sig = 10**(-8)

x0 = 50*10**(-9)

L = 200*10**(-9)

N = 400

Nx = 1000

x = np.linspace(x0, L, N)

expsig = np.exp(-((1/2)*(x-x0)**2)/(sig**2))

expimg = np.exp(1j*(x-x0))

Phi = (1/(np.pi**(1/4)*np.sqrt(sig))*expsig*expimg)

Boxfunc = np.zeros(shape = (N, Nx))

for i in range(0, N):

    SINnpi = np.sin(((i*np.pi)/L)*x)
    Boxfunc[i,:] = np.sqrt(2/L)*SINnpi
    Y = Boxfunc[i,:]*Phi

I expect the output to be a 400x1000 array with new calculated values from the multiplication between Phi and Boxfunc.

I just get the error message "could not broadcast input array from shape (400) into shape (1000)" when i get to the Boxfunc in the for-loop.

Upvotes: 0

Views: 36

Answers (1)

miuxu
miuxu

Reputation: 181

There is a problem with array x, it should be x = np.linspace(x0, L, Nx), then your code works. Or you can define Boxfunc = np.zeros(shape = (Nx, N)). The problem is from the shape between x and Boxfunc.

Upvotes: 1

Related Questions