如果两个数组在python中具有相同的变量,如何仅迭代矩阵数组的一个参数?

问题描述 投票:0回答:2

我正在尝试消除矩阵中一些与主对角线相邻的2个对角线为非零的非零项。

import numpy as np
import matplotlib.pyplot as plt

n = 3 #number of atoms in chain
eps =0.000      #onsite energy
t= 1     #hopping


hamiltonian = np.zeros((n**2,n**2))   # store the Hamiltonian
for i in np.arange(0, n**2):
    for j in np.arange(0,n**2):
        #hamiltonian[i,i] = eps
        if(i==j):
            hamiltonian[i,j] = eps
        if(i>0 and i==j):
            hamiltonian[i,j-1] = t
        if(i<n**2-1 and i==j):
            hamiltonian[i,j+1] = t
        if(i==j):
            for i in np.arange(0,n**2,n):
                hamiltonian[i,j-1] = 0 
        
print(hamiltonian)

我希望它仅消除下部三角形非零条目,但它会擦除上部三角形中的某些条目。我知道这是因为在带有for循环的最后一个if语句上,当我只希望它对第一个参数i进行迭代时,它正在对数组的两个参数进行迭代,但是由于我将i = j设置为对两个都运行。

我要获取的矩阵如下:

Desired matrix

PS:对于非常糟糕的问题格式表示抱歉,这是我的第一个问题。

python arrays numpy for-loop matrix
2个回答
0
投票
hamiltonian = np.zeros((n**2,n**2))   # store the Hamiltonian
for i in np.arange(0, n**2):
    for j in np.arange(0,n**2):
        if abs(i-j) == 1:
            hamiltonian[i,j] = 1

0
投票

这是您要寻找的吗?:

hamiltonian[0,1] = 1
hamiltonian[n**2-1,n**2-2] = 1
for i in np.arange(1, n**2-1):
  hamiltonian[i,i+1] = 1
  hamiltonian[i,i-1] = 1
© www.soinside.com 2019 - 2024. All rights reserved.