我有三角形,其中每個線路具有3個verticies的矩陣: ELEMENTSET:如何在Python中爲矩陣中的每個元素應用函數?
Element Number Vertices
2 473 1159 917
3 271 1026 816
我也有分配協調每頂點一個2D節點的矩陣 節點集:
Vertice Number (X,Y)
917 5.487167292060809 2.195789288329368
271 5.448888739433895 2.38822856765269
我已經寫了一些處理面積計算的方法,它們包含在一個類中:
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
我想用油杉()來計算以這個例子中的相同方式傳遞數組作爲參數:
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,:]))
我想申請油杉方法,但現在我只得到,當我想一個2個dimmensions陣列獲取數組一樣dimmension原始載體
a.calcArea(f[0,:],f[1,:],f[2,:])
array([ 7.5, 0. ])
你必須手動做到這一點,你不能使用其他軟件包,如'pandas' – Leb
我必須做手工=(如果你使用numpy.sin(),您可以應用到矩陣,我必須做同樣的工作 –
'map(function,sequence)'如何? – flamenco