Как умножить список в определенной позиции массива в двух циклах?

#python-3.x #list #numpy #loops #matrix

#python-3.x #Список #numpy #циклы #матрица

Вопрос:

У меня есть list K_interior, подобный этому:

 #Initial matrices 
K_Interior = [8, 5, 9, 2]
Nx = 4
Ny = 4
N = Nx*Ny #of unknowns
M = np.zeros((N,N)) #N rows, N columns
B = np.zeros((N,1)) # N rows, 1 column
 

Затем я создаю два цикла, чтобы создать массив для M:

 for i in range (1, Nx-1):
  for j in range (2,Ny):
    for k in K_Interior:
        n = i (j-1)*(Nx) # convert ij grid point to the nth grid point
        M [n,n] = -4*k #main diogonal
        M [n,n-1] = 1*k # off diagonal to the left
        M [n,n 1] = 1*k # off diagonal to the right
        M [n, n-Nx] = 1*k #far off diagonal to the left
        M [n, n Nx] = 1*k #far off diagonal to the right
        B [n] = 0   
 

В этом случае я просто хочу умножить один на один элемент K_Interior list на каждую позицию M (M[n,n]), которую я настроил. Но проблема в том, что M [n, n] имеют 4 позиции, первая позиция умножается на 4 значения из списка K_Interior, вторая позиция делает то же самое до окончательной позиции. Это не то, что я хочу. Я понятия не имею, как с этим справиться. С нетерпением жду вашей помощи.

Это результат моего кода: введите описание изображения здесь

Это результат, который я хочу получить: введите описание изображения здесь

Комментарии:

1. Можете ли вы предоставить пример ввода, правильный вывод и вывод, который вы получаете? Кроме того, для подтверждения, вы хотите M быть 16x16 матрицей?

2. Да, я хочу матрицу 16×16. Я отредактировал свой пост, чтобы добавить больше информации из вашего вопроса. Спасибо за ответ.

3. Я не уверен, что точно понимаю, что вы хотите сделать, или как вычисляются значения, но одна проблема, которую я замечаю, заключается в том, что вы переназначаете каждый индекс, а не манипулируете им. Это приводит к k тому, что для выполнения вычислений используется только последнее значение (в данном случае 2 ). Поэтому вместо M [n,n] = -4*k , я предполагаю, что вы хотите сделать что-то вроде M [n,n] = -4*k , где -4*k добавляется M[n,n] (или /, — , * , в зависимости от того, что вы хотите сделать). При умножении og, mar dividinybe добавляет if M[n,n] == 0 проверку, чтобы вы не всегда получали 0 .

4. Спасибо. Но для меня это все еще не работает. Поэтому я думаю, может быть, я собираюсь использовать другой способ, например, заменить случайные значения (базу данных, которую я подготовил ранее) на позицию матрицы, которую я хочу.