python中的面向对象编程,将(三维数组元素)附加到列表中

python中的面向对象编程,将(三维数组元素)附加到列表中,python,class,python-2.7,append,Python,Class,Python 2.7,Append,我试图创建一个beamtracer,这样我可以存储每个点的三维位置以及三维方向向量,我希望self.z是一个列表,我可以在x和v是三维数组的时候附加一个2元素元组(self.x,self.v) 最后,我想返回我以前存储的所有点对,我真的看不出我的代码做错了什么。谢谢大家。这行不通: import numpy as np """ A project on beamtracer """ class beam: def __init__(self,x = np.array([1,2,3]),v

我试图创建一个beamtracer,这样我可以存储每个点的三维位置以及三维方向向量,我希望self.z是一个列表,我可以在x和v是三维数组的时候附加一个2元素元组(self.x,self.v) 最后,我想返回我以前存储的所有点对,我真的看不出我的代码做错了什么。谢谢大家。

这行不通:

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
self.x
只有在
self
有一个值时才有意义,解析
append
定义时就不是这样了

另外,
self.z(append…
应该是
self.z.append
。 你可以用

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


警告:您可能需要重新考虑使用大量小型NumPy阵列。这类代码的总体性能往往令人失望(没有比使用Python列表或元组更好,有时甚至更差)

为了从NumPy中获得良好的性能,您通常希望尝试将计算安排为使用尽可能少的NumPy函数调用(理想情况下没有Python循环),并将这些函数调用应用于单个大数组,而不是对许多小数组进行大量函数调用

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