Заменить значения в ячейках одной матрицы из другой - PullRequest
0 голосов
/ 28 марта 2020

Я создал матрицу из нулей 18x18 под названием ' master_matrix ', и мне нужно заменить значения ее строк и столбцов в соответствующих им индексах значениями, которые другая матрица 6x6 назвала я little_matrix дает мне.

Параллельно с этим, я просто ламада ' replace_master ' que reemplaza esos ceros por los valores de ' little_matrix ' encasillándolos donde los índices indiquen.

Этот процесс мне нужно повторить 6 раз с другими индексами, чтобы это произошло, я создал массив с именем ' input_data ' и al oop, который будет позвольте мне сделать этот процесс для 6 элементов, которые там есть.

ПРОБЛЕМА

Моя проблема в том, что все это работает нормально, только если мои первые три индекса i связаны последовательно со своими следующими тремя индексами j, например, в элементе 6 массива ' input_data ', мои индексы i равны (1,2, 3) и их соответствующие индексы s j есть (4,5,6). НО, если они не связаны последовательно, как, например, то, что происходит в элементе 4, чьи индексы i равны (10,11,12), и их соответствующие j повышаются до (4,5,6), то это уже не работает и все портит , Прикрепленные изображения:

- эта матрица соответствует элементу 6 и там она это делает. Это изображение соответствует master_matrix: относится к элементу 6 (чьи индексы i и j связаны последовательно)

-Но эта матрица, соответствующая элементу 4, больше не выходит

Вот так я получаю массив на основе моего кода ... Это изображение соответствует master_matrix: принадлежащему элементу 4 (чьи индексы i и j НЕ связаны последовательно [image1])

И вот как вы должны получить результат ... Это изображение соответствует master_matrix: принадлежащему элементу 4 (чьи индексы i и j НЕ связаны последовательно) [ image2]

Я прокомментировал элементы 5 и 6 матрицы 'input_data', чтобы они могли видеть, что я получаю от элемента 4, если они хотят увидеть, что исходит от элемента 6, индексы которого последовательно, они могут удалить комментарий.

Я очень благодарен за помощь, которую вы можете оказать мне, и если у вас есть какие-либо вопросы, которые вы можете написать, я буду очень внимательным, привет нгс.

import numpy as np

# 1 I define the large zeros matrix where then I will place the values based on the 'little_matrix__________________________________

master_matrix = np.zeros((18,18))

# 2. Define a function that allows locating the values from 'little_matrix' to 'master_matrix' !!!!_____________________________________________

def replace_master(index_i, value_i):
    l = 0
    data = []
    data.extend(little_matrix[index_i]) #-->Get data row 0 of the 'little_matrix'
    for d in data:
        master_matrix[value_i][pivot_index + l] = d #--> Write to the 'master_matrix'
        l += 1

# 3. Data entered by user interface_____________________________________________________________________________________________

#                          |---------INDICES: The indices define the position where the zeros of 'master_matrix' are replaced by values of 'little_matrix'-----|
#           Element Row    |-------1(i)            2(i)            3(i)             1(j)           2(j)                 3(j) -----------------------------------|
#               [Col0]     |------[Col1]          [Col2]          [Col3]           [Col4]         [Col5]               [Col6] ----------------------------------|

input_data = [[ 1,              13,            14,               15,               7,             8,                  9],
                 [ 2,              16,            17,               18,              10,            11,                12],
                 [ 3,               7,             8,                9,               1,             2,                 3],
                 [ 4,              10,            11,               12,               4,             5,                 6]]
#                 [ 5,               7,             8,                9,              10,            11,                 12],
#                 [ 6,               1,             2,                3,               4,             5,                    6]]

# 4. Loop that will allow you to work with each row of each element__________________________________________________________________________

for i in range(len(input_data)): #--> For row in the 'data entry' range [i]...

    index = [] #--> I extract the indexes for each element, inside the loop i
    index.extend([input_data[i][1], input_data[i][2], input_data[i][3],
                    input_data[i][4], input_data[i][5], input_data[i][6]])   

    index_assemble = [] #--> Because the matrix is counted from scratch, I had to subtract 1 from the index list 
    for e in index:
        index_assemble.append(e-1)

# 4. Extraction of variables that each element has for calculation of 'little_matrix'_____________________________________________________

    d = 5
    s = 0.2          
    e = 0.05            
    y = 5000000           

# 5. Little_matrix calculation__________________________________________________________________________________________________________     

#                            |---INDICES: They are the indices of 'little_matrix' that will replace those of 'master_matrix'----| 
#                            |---1(i)        2(i)         3(i)        1(j)         2(j)         3(j) ---------------------|
    little_matrix = np.array([[ s*y/d,           0,           0,    -s*y/d,            0,           0],
                              [     0,    y*e/d**3,    y*e/d**2,         0,    -y*e/d**3,    y*e/d**2],
                              [     0,    y*e/d**2,       y*e/d,         0,    -y*e/d**2,       y*e/d],
                              [-s*y/d,           0,           0,     s*y/d,            0,           0],
                              [     0,    y*e/d**3,   -y*e/d**2,         0,     y*e/d**3,   -y*e/d**2],
                              [     0,    y*e/d**2,       y*e/d,         0,    -y*e/d**2,       y*e/d]])

# 6. Assembling the 'master_matrix'___________________________________________________________________________________________________

for i in range(len(input_data)):

    pivot_index = index_assemble[0] #--> Pivot Index: It is the index that locates the first element of 'little_matrix', to later insert in 'master_matrix'
    for index_i, value_i in enumerate(index_assemble): #--> For each row in the 'index' range ...
        replace_master(index_i, value_i) #--> Replace array of zeros in 'master_matrix' with corresponding places in 'little_matrix' based on indices
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...