2017-03-10 107 views
0

我想從列表(下面的代碼中的nmax)創建一個陣列數組。我試圖使用列表理解,但我沒有得到我期望的結果。 如果我手動分配行,它按預期工作:從列表中創建numpy數組陣列

dummy[0] = np.linspace(1, nmax[0], len(nmax)) 
dummy[0] 
array([ 1.  , 1.00166722, 1.00333444, ..., 5.99666556, 
    5.99833278, 6.  ]) 

dummy[2999] = np.linspace(1, nmax[2999], len(nmax)) 
dummy[2999] 
array([ 1.  , 1.01433811, 1.02867623, ..., 43.97132377, 
    43.98566189, 44.  ]) 

但隨着列表理解,它給了我不同的結果:

dummy = [(np.linspace(1, nmax[i], len(nmax))) for i in nmax] 
dummy[0] 
array([ 1.  , 1.00166722, 1.00333444, ..., 5.99666556, 
    5.99833278, 6.  ]) 
dummy[2999] 
array([ 1.  , 1.00200067, 1.00400133, ..., 6.99599867, 
    6.99799933, 7.  ]) 

從一個值到另一個變化是,在指數2585我不知道爲什麼。

這是全碼:

rho=7800 
lamb = 500 * 10 **(-9) 

#parameters 
a = np.linspace(1e-9, 3000e-9, 3000) 
x = a * 2*np.pi/lamb 

nmax = [int(round(2+i+4*i**(1/3))) for i in x] # list 

n = np.zeros((len(nmax), len(nmax))) 

#dummy = [(np.linspace(1, nmax[i], len(nmax))) for i in nmax] 

回答

2

嘗試dummy = [(np.linspace(1, i, len(nmax))) for i in nmax],你實際上做的是dummy[2999] = np.linspace(1, nmax[nmax[2999]], len(nmax)),而不是dummy[2999] = np.linspace(1, nmax[2999], len(nmax))