我是一个python初学者,我正在寻找创建一个1&1和#1的数组。我从一个NxN矩阵开始,其值从0到1,然后用np.where将其转换为1&1;和-1' s。或者我想。稍后在代码中尝试访问此数组时,我收到错误消息。
返回2 * array1 [x,y] * sum((array1,N,x,y))
" IndexError:标量变量索引无效"
def randomarray(N):
array1 = np.random.rand(N,N)
array1 = np.where(array1 <= 0.5, 1,-1)
return array1
def closepoints(array1, N, x, y):
return array1[(x - 1) % N, y] + array1[(x + 1) % N, y] + \
array1[x, (y - 1) % N] + array1[x, (y + 1) % N]
def flip(array1, N, x ,y):
return 2 * array1[x, y] * sum(closepoints(array1, N, x, y)) ***line where error is occuring***
sweeps_no = 50
lat = randomarray(N)
for k in range(sweeps_no):
i = np.random.randint(N) #randomly selecting an individual lattice point
j = np.random.randint(N)
array1 = closepoint(lat, N, i, j)
energy = flip(lat[i,j], array1, i, j)
print energy
if energy <= 0:
lat[i,j] *= -lat[i,j]
energies += energy
energycount.append(energies)
我很确定这是因为这行:
array1 = np.where(array1 <= 0.5, 1,-1)
那array1只是给定的点而不是实际的数组? 令我感到困惑的是,我没有收到函数关闭点的错误消息,这是第一次,只是翻转。我尝试打印array1并返回-4,所以它绝对是一个标量。我无法弄清楚如何将我的randomarray函数说出来,以便它返回一个实际的数组,而不仅仅是数组的点。
答案 0 :(得分:2)
lat[i, j]
是标量吗?你做不到lat[i, j][x, y]