2011-08-17 94 views
1

下面是(非常)shorterned我的程序的vesrion理解困難numpy的陣列行爲

的normvecs矢量沒有覆蓋掉了,你woud能夠看到自己只是一旦你運行該代碼段中,參數是否正確 GEOM函數接受N + 1×2陣列和n作爲輸入,我想我做一些非常愚蠢的(我認爲我是),或者我不明白這種行爲

import numpy as np 

#geometry calculations 
def geom(pts,n): 
    r = np.zeros(n) 
    normvecs = np.zeros((n,2)) 
    tgtvecs = np.zeros((n,2)) 
    alphap = np.zeros(n) 
    cpts = np.zeros((n,2)) 
    #collocation points 
    cpts[:,0] = (pts[0:n,0]+pts[1:n+1,0])/2 
    cpts[:,1] = (pts[0:n,1]+pts[1:n+1,1])/2 
    #length of panels 
    r[:] = np.sqrt((pts[0:n,0]-pts[1:n+1,0])**2 + (pts[0:n,1]-pts[1:n+1,1])**2) 
    #angle of each panel with the horizantal(chord)/refernce axis 
    alphap[:] = np.arctan2(pts[1:n+1,1]-pts[0:n,1],pts[1:n+1,0]-pts[0:n,0]) 
    #normal vectors 
    normvecs[:,0] = -np.sin(alphap[:]) 
    normvecs[:,1] = np.cos(alphap[:]) 
    xx = np.cos(alphap[:]) 
    print(normvecs[:,0],normvecs[:,1],np.cos(alphap[:]),xx) 
    return 

geom(np.random.rand(31,2),30) 

normvecs [:,1]僅顯示nomvecs [:,0]的負數 我不能覆蓋像normvecs [:,1] = xx(沒有錯誤..但只是打印相同的東西)

我可能聽起來不清楚,一旦你運行你可能會看到我在嘗試告訴。

什麼問題?(如果是這樣的!)

回答

2

我看不出有什麼問題都沒有。運行你的代碼更簡潔的版本:

import numpy as np 

#geometry calculations 
def geom(pts,n): 
    normvecs = np.zeros((n,2)) 
    alphap = np.zeros(n) 
    alphap[:] = np.arctan2(pts[1:n+1,1]-pts[0:n,1],pts[1:n+1,0]-pts[0:n,0]) 
    normvecs[:,0] = -np.sin(alphap[:]) 
    normvecs[:,1] = np.cos(alphap[:]) 
    print np.abs(normvecs[:,0])-np.abs(normvecs[:,1]) 
    return 

geom(np.random.rand(31,2),30) 

產生這樣的:

[ 0.47500019 -0.03182906 -0.46597523 0.7479451 0.12580804 -0.36311644 
    0.06406616 -0.29641905 -0.39982319 -0.98493049 -0.4431009 -0.29506693 
-0.25931983 0.67831564 -0.80676608 -0.53007712 0.63448069 0.67457029 
    0.25457744 -0.82095266 -0.27461275 -0.91244341 -0.69530798 -0.69023852 
    0.18840807 0.49891863 0.52417747 0.06833423 0.83449866 0.47608894] 

這表明,我認爲的normvecs兩行你說的內容是在大小相同的都沒有。

+0

是沒有問題,這是一個看不見的邏輯錯誤我跳過代碼中的一行(考慮它無關緊要)張貼在我有這個(錯誤,我的壞!)賦值`tgtvecs [:,0] = np。 cos(alphap [:]); normvecs [:,] = np.sin(alphap [:])` – fedvasu 2011-08-17 13:25:05