0
我試圖陣列添加到numpy的數組的開頭和結尾,並定義了以下功能:串連陣列的numpy的陣列
import numpy as np
from numpy import fft as fft
def E(X,N,M):
X=np.arange(-X,X)
M=np.arange(0,M)
E1=np.exp(-X**2)
E1.shape=(np.size(E1),1)
a=np.zeros((N,1))
E1 = np.concatenate((a,E1,a))
E2 = np.zeros((len(E1),len(M)))
E2[:,0]=E1
return E2
當我運行的功能,它給了我下面的錯誤:
print E(10,5,20)
E2[:,0]=E1
ValueError: could not broadcast input array from shape (30,1) into shape (30)
我不知道我在做什麼愚蠢的錯誤,但我感謝您的幫助。
感謝
如果我現在修改了原來的代碼如下:
def E(X,N,M):
X=np.arange(-X,X)
M=np.arange(0,M)
E1=np.exp(-X**2)
N=np.zeros((N,))
dX=X[1]-X[0]
K=np.sqrt(1-(X/(len(X)*dX)))
E1 = np.concatenate((N,E1,N))
E2 = np.zeros((len(E1),len(M)))
E2[:,0]=E1
for k in M:
E2[:,k+1] = fft.ifftshift(fft.fft(fft.fftshift(E2[:,k])))*np.exp(-1j*K)
E2[:,k+1] = fft.fftshift(fft.ifft(fft.ifftshift(E2[:,k+1])))
return E2
我會收到以下錯誤:
ValueError: operands could not be broadcast together with shapes (30,) (20,)
請你讓我知道我在做什麼錯誤? 感謝
錯誤消息中的形狀是有意義的。 'E2 [:,0]'是一個1d的插槽。你做了'E1' 2d。要麼將它打散,要麼在連接之前不要添加第二個維度。 – hpaulj
@hpaulj感謝您的評論;其實我不想讓E1 2d; 我只想將矢量添加到數組的尾部和尾部;在Matlab它這樣做: E1 = vertcat(零(N,1),E1,零(N,1)); 我想同樣的顛簸,這就是我如何做的。你能讓我知道我該怎麼做嗎? –
嘗試:'E2 [:,0] = E1.ravel()'。 – Divakar