Как перебирать только один аргумент матричного массива, если оба имеют одну и ту же переменную в python? - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь удалить некоторые ненулевые элементы в матрице, где две смежные диагонали главной диагонали отличны от нуля.

  
h = np.zeros((n**2,n**2))
for i in np.arange(0, n**2):
    for j in np.arange(0,n**2):
        if(i==j):
            for i in np.arange(0,n**2,n):
                h[i,j-1] = 0 
        
print(h)

Я хочу, чтобы он удалял только ненулевые записи нижнего треугольника, но стирает некоторые записи в верхнем треугольнике. Я знаю, что это потому, что в последнем операторе if с for l oop он повторяется для обоих аргументов массива, когда я хочу, чтобы он выполнялся только для первого аргумента i, но поскольку я установил i = j, он работает для обоих.

Я хочу получить следующую матрицу:

Желаемая матрица

PS: извините за чрезвычайно плохой формат вопроса, это мой первый вопрос.

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Это то, что вы ищете?:

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
0 голосов
/ 30 мая 2020
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
...