0

計算物理プロジェクトのコードを書いています。

クラスのインスタンスに配列を追加して、python でクラスを実装する方法を知りたいです。

コードの元の部分は次のとおりです。

class Particle():
    def __init__(self, (x,y,z), n, radius, neighbours):

         self.n = n
         self.x = x
         self.y = y
         self.z = z
         self.radius = radius




number  = loadtxt("final_limited.txt", usecols=(0,), unpack=True, dtype = int)
c1,c2,c3,r = loadtxt("final_limited.txt", usecols=(1,2,3,5), unpack=True, dtype=float)





number_of_particles = len(number)
my_particles        = []
overlap             = []
contact_number      = []




for i in range(number_of_particles):
    n = number[i]
    x = c1[i]
    y = c2[i]
    z = c3[i]
    radius = r[i]
    neighbours = []

    particle = Particle((x,y,z), n, radius, neighbours)
    my_particles.append(particle)


for particle1 in my_particles:
    count = 0
    for particle2 in my_particles:
        distance = PBCdist(particle1, particle2)
        sum_of_radii = Sum_radii(particle1, particle2)
        if (distance < sum_of_radii) and (distance>0):
            count +=1

            olap = (Decimal(sum_of_radii) - Decimal(distance))
            overlap.append(olap)
    contact_number.append(count)

私は次のことをしたいと思います:

class Particle():
    def __init__(self, (x,y,z), n, radius, neighbours):
        neighbours = []
        self.n = n
        self.x = x
        self.y = y
        self.z = z
        self.radius = radius
        self.neighbours = neighbours 

そして、ネストされたループで:

for particle1 in my_particles:
    count = 0
    for particle2 in my_particles:
        distance = PBCdist(particle1, particle2)
        sum_of_radii = Sum_radii(particle1, particle2)
        if (distance < sum_of_radii) and (distance>0):
             count +=1
             neighbours.append(particle2.n)
             olap = (Decimal(sum_of_radii) - Decimal(distance))
             overlap.append(olap)
    contact_number.append(count)

ご覧のとおり、クラスの各要素のプロパティとして、各粒子に隣接する粒子のリストを関連付けます。

ただし、確認すると、このコードは機能しません。tp が次のように入力できるようにしたい:

print my_particles[0].neighbours

そしてリストを取得します。

さらに、必要な小数点以下20〜21桁を提供できるfloatのようなNumpy dtypeがあるかどうか知っていますか? float データ型を使用すると、コードはもちろん高速 (10 倍) になりますが、Decimal ではなく、完全な精度が必要な numpy 型を使用したいと考えています。

4

1 に答える 1

2

neighbors パラメータを空のリストに置き換えます

def __init__(self, (x,y,z), n, radius, neighbours):
     neighbours = []  # <- HERE
     self.neighbours = neighbours

その行を削除すると、ネイバー リストにアクセスできるようになります。

于 2013-07-03T13:37:51.633 に答える