2017-04-24 95 views
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,) 

請你讓我知道我在做什麼錯誤? 感謝

+0

錯誤消息中的形狀是有意義的。 'E2 [:,0]'是一個1d的插槽。你做了'E1' 2d。要麼將它打散,要麼在連接之前不要添加第二個維度。 – hpaulj

+0

@hpaulj感謝您的評論;其實我不想讓E1 2d; 我只想將矢量添加到數組的尾部和尾部;在Matlab它這樣做: E1 = vertcat(零(N,1),E1,零(N,1)); 我想同樣的顛簸,這就是我如何做的。你能讓我知道我該怎麼做嗎? –

+0

嘗試:'E2 [:,0] = E1.ravel()'。 – Divakar

回答

0

你不需要做E1一個二維數組; concatenate將與1d一起使用:

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,)) 
    E1 = np.concatenate((a,E1,a)) 
    E2 = np.zeros((len(E1),len(M))) 
    E2[:,0]=E1 
    return E2 

In [401]: E(3,2,2) 
Out[401]: 
array([[ 0.00000000e+00, 0.00000000e+00], 
     [ 0.00000000e+00, 0.00000000e+00], 
     [ 1.23409804e-04, 0.00000000e+00], 
     [ 1.83156389e-02, 0.00000000e+00], 
     [ 3.67879441e-01, 0.00000000e+00], 
     [ 1.00000000e+00, 0.00000000e+00], 
     [ 3.67879441e-01, 0.00000000e+00], 
     [ 1.83156389e-02, 0.00000000e+00], 
     [ 0.00000000e+00, 0.00000000e+00], 
     [ 0.00000000e+00, 0.00000000e+00]]) 
+0

感謝您的回答,它解決了問題;但是我修改了我的原始代碼(如上面的原始問題所述),現在我得到了不同的錯誤。你能讓我知道我失蹤了嗎? @hpaulj –