それで先日、タイプミスのために問題に悩まされました。ネストされたループをi + = 1で繰り返す代わりに、i = +1を使用していました。ステップ数の印刷を開始し、ステップ1が連続して印刷されていることを確認するまで、これに気づきませんでした。したがって、私が得ていたプロットは意味がありませんでした。
しかし、私が理解していないのは、なぜプロットがまったく得られず、コードが無限ループに陥っていなかったのかということです。また、ステップ数の途中でしかデータを計算していないはずだったので、どうやってデータがあったのか全くわかりません。または、i = + 1は他の何かを意味しますか?i = +1に関する情報がオンラインでまったく見つからないようです
元のコードの要約版は次のとおりです。
for temp in np.linspace(1.0,4.0,num=100):
energyarray = []
for step in np.arange(0, sw*2):
for i in range(n-1):
for j in range(n-1):
H_old = -J*matrix[i,j]*(matrix[i,j-1] + matrix[i,j+1] + matrix[i-1,j] + matrix[i+1,j])
H_new = J*matrix[i,j]*(matrix[i,j-1] + matrix[i,j+1] + matrix[i-1,j] + matrix[i+1,j])
del_H = H_old-H_new
if del_H >= 0:
matrix[i,j] = -matrix[i,j]
elif del_H < 0:
prob = np.exp((del_H)/(temp))
rand = random.random()
if rand < prob:
matrix[i,j] = -matrix[i,j]
else:
matrix[i,j] = matrix[i,j]
if step >= (sw):
Ene = EnergyCal(matrix)
energyarray.append(Ene)
step =+ 1
energy_sum = []
energy_sum = sum(energyarray)
plt.figure(10)
plt.plot(temp, energy_sum, 'ro')
plt.show()
Pythonのforループは、イテレータベースの「for-each」ループです。反復変数は、各反復の開始時に再割り当てされます。つまり、次のループがあります。
In [15]: nums = 1,2,5,8
In [16]: for num in nums:
...: print(num)
...:
1
2
5
8
と同等です:
In [17]: it = iter(nums)
...: while True:
...: try:
...: num = next(it)
...: except StopIteration:
...: break
...: print(num)
...:
1
2
5
8
同様に、次のループは同等です。
In [19]: for num in nums:
...: print("num:", num)
...: num += 1
...: print("num + 1:", num)
...:
...:
num: 1
num + 1: 2
num: 2
num + 1: 3
num: 5
num + 1: 6
num: 8
num + 1: 9
In [20]: it = iter(nums)
...: while True:
...: try:
...: num = next(it)
...: except StopIteration:
...: break
...: print("num:", num)
...: num += 1
...: print("num + 1:", num)
...:
num: 1
num + 1: 2
num: 2
num + 1: 3
num: 5
num + 1: 6
num: 8
num + 1: 9
CスタイルのforループはPythonには存在しませんが、いつでもwhileループを記述できます(cスタイルのforループは、本質的にwhileループの構文糖衣です)。
for(int i = 0; i < n; i++){
// do stuff
}
と同等です:
i = 0
while i < n:
# do stuff
i += 1
違いは、この場合、反復はに依存しi
、# do stuff
変更i
するものはすべて反復に影響を与えるのに対し、前者の場合、反復はイテレータに依存することに注意してください。イテレータを変更すると、反復が影響を受けることに注意してください。
In [25]: it = iter(nums) # give us an iterator
...: for num in it:
...: print(num)
...: junk = next(it) # modifying the iterator by taking next value
...:
...:
1
5
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加