我有一个三角形矩阵,其中每条直线有3个垂直方向:
元素集:Element Number Vertices
2 473 1159 917
3 271 1026 816
我也有一个节点矩阵,它为每个垂直点指定一个二维坐标
节点集:
^{pr2}$
我写了一些处理面积计算的方法,它们包含在一个类中:def findArea(self):
self.elementsArea = nu.zeros((self.elementSet.shape[0],1))
self.elementsArea[:] = self.calcArea(*self.elementSet[:,-3:])
#Calculate the area of 3 points
def calcArea (self,p1,p2,p3):
[p1,p2,p3] = [self.nodeCoord(p1),self.nodeCoord(p2),self.nodeCoord(p3)]
return 0.5*abs(p1[Xc]*(p2[Yc] - p3[Yc]) + p2[Xc]*(p3[Yc]-p1[Yc]) + p3[Xc]*(p1[Yc] - p2[Yc]))
# returns the vertices of a point
def nodeCoord(self, point):
return(self.nodeSet[point-1,-3:-1])
其中函数calcArea工作正常,但我想将函数应用于矩阵的每个元素,并在不使用循环的情况下分配给另一个矩阵。在
我必须写一些东西,比如:A[:] = func(B[:])
在def findArea()中,我试图做这样的事情,但它给了我以下错误:calcArea() takes 4 positional arguments but 2171 were given
我想用calrea()来计算作为参数的区域传递数组,方法与我在本例中所做的相同:import numpy as np
def test(x,y):
return x*y
f = np.array([[1,2,5,6,7] , [3,4,9,6,7] ,[6,7,23,34,32]])
print(test(f[0,:],f[1,:]))
我试图应用calarea方法,但我现在只得到了一个2dimmensions数组,而我本应该得到一个与原始向量相同的dimmension数组a.calcArea(f[0,:],f[1,:],f[2,:])
array([ 7.5, 0. ])