【问题标题】:How to combine same variables in classes如何在类中组合相同的变量
【发布时间】:2020-12-16 15:37:46
【问题描述】:

正在尝试创建 n 体模拟,目前正在创建粒子类。我通过输入一些变量(例如位置和速度)来初始化该类。我想知道是否可以以某种方式将所有相同的变量组合到一个数组中。例如,当我调用 Particle 类时,它会保存所有变量,但变量都是关于那个特定粒子并与之相关联的。我想知道我是否能够找到一种方法来返回一个数组中所有粒子的速度。

class Particle:

    Position = np.full((1, 3), 0, dtype=float)
    Velocity = np.full((1, 3), 0, dtype=float)
    Acceleration = np.full((1, 3), 0, dtype=float)
    Name = np.full((1, 1), 0, dtype=float)
    Mass = np.full((1, 1), 0, dtype=float)

    """Initialisng all all the data members for each Particle"""

    def __init__(self, Name, Mass, initPosition, initVelocity, initAcceleration):
        self.Name = Name
        self.Mass = Mass
        self.Position = np.array(initPosition)
        self.Velocity = np.array(initVelocity)
        self.Aceleration = np.array(initAcceleration)

    def arrays(self, Positions, Velocities, Accelerations, Names, Masses):
        Positions.append(self.Position)
        Velocities.append(self.Velocity)
        Accelerations.append(self.Acceleration)
        Names.append(self.Name)
        Masses.append(self.Mass)

我的第二个定义“数组”试图这样做但没有成功。目的是让我可以输入 Positions 并生成一个 (N,3) 矩阵,我可以在该矩阵上执行计算。这可能吗?

【问题讨论】:

  • 不确定你到底在想什么,但我想也许你可以使用两个类,一个叫做 Particle 代表粒子的特定实例,并使用实例数据作为名称、位置等(相反对您拥有的数据进行分类,这似乎没有用)。另一个是跟踪它们的粒子容器。或者,如果您只想要一个粒子容器,您可以在粒子中创建一个类变量列表并附加到该列表中。

标签: python class self


【解决方案1】:

我不确定你实际上想做什么:

如果你想更新并返回一个粒子对象的所有位置/速度,那么你可以定义:

def arrays(self, Positions, Velocities, Accelerations, Names, Masses):
    self.Positions = np.append(self.Position, Position)
    self.Velocities = np.append(self.Velocity, Velocity)
    self.Accelerations = np.append(self.Acceleration, Acceleration)
    self.Names = np.append(self.Name, Name)
    self.Masses = np.append(self.Mass, Mass)

然后您可以访问类属性,例如:

p1 = Particle(...)
p1.Positions

您可以从外部更新您的粒子属性并可以访问它。

但是在您的情况下(我猜至少)您可能需要多个粒子对象。所以最好定义一个新类,它将粒子集合[Particle(*args, **kwargs), Particle(*args, **kwargs), ...] 作为输入,然后您可以访问所有粒子属性和随心所欲。

【讨论】:

    【解决方案2】:

    其实'numpy.ndarray' object has no attribute 'append'

    使用append 中的numpy

    a = np.array([1, 2])
    a = np.append(a, 3)
    

    并且注意执行的结果一定要赋值,否则什么都不会加。

    【讨论】:

      【解决方案3】:
      def arrays(self, Positions, Velocities, Accelerations, Names, Masses):
         self.Positions.append(Position)
         self.Velocities.append(Velocity)
         self.Accelerations.append(Acceleration)
         self.Names.append(Name)
         self.Masses.append(Mass)
      

      【讨论】:

        猜你喜欢
        • 2020-01-02
        • 2023-03-13
        • 1970-01-01
        • 2019-12-21
        • 2019-01-27
        • 2021-01-20
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多