0

L値を変化させてかかる時間を測定する必要があるため、コードを最適化する必要があります。私がしなければならなかったのは、同じ直径dの周期点(x、y、z)で立方体の箱(LxLxL)を埋めることです。これまでのところ、これは私が持っているものです:

L=10
d=2

x,y,z = 0,0,0
counter=0

with open("question1.xyz","w") as f:
    while x<=L-d:
        while y<=L-d:
            while z<=L-d:
                f.write('H {} {} {}\n'.format(x,y,z))
                counter=counter+1
                z=z+d
            z=0
            y=y+d
        z,y=0,0
        x=x+d

次に、次の形式のファイル(.xyzファイル)を出力する必要があります。

H 0.000000 0.000000 0.000000
H 0.000000 0.000000 1.000000
H 0.000000 0.000000 2.000000
H 0.000000 0.000000 3.000000
H 0.000000 0.000000 4.000000

何かアイデアや提案はありますか?前もって感謝します!

4

2 に答える 2

1
from itertools import product

L=10
d=2

with open("question1.xyz","w") as f:
    f.write('\n'.join('H {} {} {}'.format(*t) for t in product(range(0, L, d), repeat=3)))
于 2012-10-03T10:20:15.703 に答える
1

呼び出す回数を最小限に抑える必要がありますf.write()。これにより、Pythonランタイムがシステムコールを実行する必要がある回数が最小限に抑えられます。これは通常、コストがかかります。

したがって、write()関数を呼び出す前に、出力のより長い部分を構築します。これは、文字列に追加するか、(さらに良いことに)リストに追加するだけで非常に簡単に行うことができjoin()、リストを1つの文字列に折りたたむときに使用し、それを実行しますwrite()

于 2012-10-03T09:21:30.020 に答える