我试图在python中模拟一个自旋网格,它可以改变自旋的方向(用符号表示):
>>> import numpy as np
>>> spin_values = np.random.choice([-1, 1], (2, 2))
>>> spin_values
array([[-1, 1],
[ 1, 1]])
然后,我抛出两组随机指数,表示自旋有一定的概率改变方向,比如:
>>> i = np.array([1, 1])
>>> j = np.array([0, 0])
>>> switches = np.array([-1, -1])
这里i和j包含可能改变和切换状态的索引,无论它们是切换(-1)还是保持它们的方向(1)。
>>> spin_values[i, j] *= switches
当自旋方向只改变一次时,这工作得很好。但是,当它应该改变两次(就像示例值一样)时,它只改变一次,因此给了我一个错误的结果。
>>> spin_values
array([[-1, 1],
[-1, 1]])
如何在运行时间很短的情况下获得正确的结果(这必须在更大的网格上进行多次)?
1条答案
按热度按时间rnmwe5a21#
我将使用
numpy.unique
来获得唯一索引对的计数,并计算-1 ** n
:更新了
spin_values
: