以下是我程序的(非常)缩短的内容
normvecs向量没有被覆盖,运行此代码段后,您将能够自己看到参数正确
geom函数需要一个n + 1 X 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那样覆盖(没有错误..只是打印了同样的东西)
我可能听不清楚,一旦您跑步,您可能会看到我要说的话。
有什么问题?(如果是这样!)
最佳答案
我完全没问题。运行更简洁的代码版本:
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
的元素在大小上是相同的。关于python - 难以理解numpy数组行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7091544/