2014-01-30 33 views
0
import numpy as np 
""" A project on beamtracer """ 
class beam: 
    def __init__(self,x = np.array([1,2,3]),v = np.array([2,3,4])): 
     self.x = np.array(x) 
     self.v = np.array(v) 
     self.X = [self.x] 
     self.V = [self.v] 
     self.z = [(self.X,self.V)] 


    def p(self): 
     return self.x 
    def k(self): 
     return self.v 
    def append(self,(self.x,self.v)): 
     return self.z(append(self.x,self.v)) 
    def coll(self): 
     return self.z 

我試圖創建一個beamtracer,以便我可以存儲三維位置,以及在每個點的三維方向矢量,我希望self.z是一個列表,我可以在x和v是3d數組的時候附加一個2元素元組(self.x,self.v) 最後,我想返回所有已存儲的點對之前,我無法真正看到我的代碼做錯了什麼。感謝大家。python中的面向對象編程,追加(3維數組元素)到列表

回答

1

這是行不通的:

def append(self,(self.x,self.v)): 
    return self.z(append(self.x,self.v)) 

self.x沒有意義,直到self有一個值,當append定義解析這是情況並非如此。

另外,self.z(append...)應該是self.z.append。 您可以使用

def append(self, x, v): 
    return self.z.append([x, v]) 

改爲。


警告:您可能要重新考慮使用大量的小型NumPy陣列。這樣的代碼的整體性能往往令人失望(沒有更好的,有時甚至比剛剛使用Python列表或元組更糟糕)。

爲了獲得NumPy的良好性能,您通常希望嘗試安排您的計算使用最少數量的NumPy函數調用(理想情況下不使用Python循環)並將這些函數調用應用於單個大數組,而是比許多小陣列上的許多函數調用都要多。