計算物理プロジェクトのコードを書いています。
クラスのインスタンスに配列を追加して、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 型を使用したいと考えています。