无意中将我的阵列变成标量?

时间:2018-01-10 09:31:11

标签: python arrays python-2.7

我是一个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函数说出来,以便它返回一个实际的数组,而不仅仅是数组的点。

1 个答案:

答案 0 :(得分:2)

lat[i, j]是标量吗?你做不到lat[i, j][x, y]