【问题标题】:Swapping elements in array defined in class python交换类python中定义的数组中的元素
【发布时间】:2016-10-31 20:21:39
【问题描述】:

我正在模拟两个不同物种的粒子碰撞。我正在使用一个类来定义每个物种和一个用于保存粒子位置和速度的数组的类。

当发生碰撞时,我必须将 A 类粒子的速度与 B 类粒子的速度交换。

类在单独的文件中定义为:

class Particle(object):
    def __init__(self,num):
        self.x=numpy.zeros((num,1)) #Position
        self.v=numpy.zeros((num,3)) #Velocity

class Species(object):
    def __init__(self):
        self.mass=[]
        self.spwt=[]
        self.np=[]
        self.np_alloc=[]
        self.part=[]

物种在主文件中创建:

#variables to hold species
A = struct.Species()
B = struct.Species()

#set species data
A.mass = 1      
A.np = 0
A.spwt=spwt
A.np_alloc = num
A.part = struct.Particle(A.np_alloc)


B.mass = 1     
B.np = 0
B.spwt=spwt
B.np_alloc = int(cloud_den/spwt/cloud_len)
B.part = struct.Particle(B.np_alloc)

当我尝试用速度交换粒子时

print A.part.v[p1]
print B.part.v[p2]

A.part.v[p1],B.part.v[p2]=B.part.v[p2],A.part.v[p1]

print A.part.v[p1]
print B.part.v[p2]

输出是:

[ 1000. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]

【问题讨论】:

    标签: python class swap


    【解决方案1】:

    这个问题与 numpy 有关,而不是在类中交换元素。

    当你制作时:

    A.part.v[p1] 
    

    您正在创建阵列的视图。相反,您需要创建一个副本:

    c = numpy.copy(A.part.v[p1])
    A.part.v[p1] = B.part.v[p2]
    B.part.v[p2] = c
    

    这应该可行。

    也许有更多的pythonic方法来执行交换,但这应该可行。

    【讨论】:

      猜你喜欢
      • 2012-09-21
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多