【问题标题】:Object oriented programming in python, append (3 dimensional array elements) to a listpython中的面向对象编程,将(3维数组元素)附加到列表中
【发布时间】:2014-02-22 03:50:38
【问题描述】:
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

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

【问题讨论】:

    标签: python class python-2.7 append


    【解决方案1】:

    这行不通:

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

    self.xself 有值之前没有意义,而在解析append 定义时则不然。

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

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

    改为。


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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 2021-10-06
      • 2017-08-05
      • 2013-03-05
      • 2017-12-18
      • 2016-09-17
      • 1970-01-01
      相关资源
      最近更新 更多