Заменить в массиве нулей другими значениями в определенном вопросе cell_updated - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно решить проблему, в которой я потратил часы, используя данные из моего листа Excel, я создал матрицу нулей 6x36 '' нулей '' и матрицу преобразования координат 6x6 '' matrix_tran '' [изображение 1 ]. enter image description here

Моя проблема в том, что я не могу найти способ заменить нули матрицы '' нулей '' значениями, которые диктует матрица 'matrix_tran' ' и чье местоположение должно быть в столбцах (4,5,6, 7,8,9), которые задаются вектором соединения (4,5,6,7,8,9) элемента 15 листа Excel, то есть последняя строка для итерации l oop [изображение 2]. enter image description here

В заключение: Ниже я покажу, как он подходит и как должен выглядеть [изображения 3 и 4 соответственно]. enter image description here

Я был бы очень признателен за вашу помощь и извините за мой английский sh, но это не мой родной язык, большое приветствие.

import pandas as pd
import numpy as np

ex = pd.ExcelFile('matrix_tr.xlsx')
hoja = ex.parse('Hoja1')

cols = 36

for n in range(0,len(hoja)):
    A = hoja['ELEMENT #'][n]
    B = hoja['1(i)'][n]
    C = hoja['2(i)'][n]
    D = hoja['3(i)'][n]
    E = hoja['1(j)'][n]
    F = hoja['2(j)'][n]
    G = hoja['3(j)'][n]
    H = hoja['X(i)'][n]  
    I = hoja['Y(i)'][n]
    J = hoja['X(j)'][n]  
    K = hoja['Y(j)'][n]

    L = np.sqrt((J-H)**2+(K-I)**2)
    lx = (J-H)/L
    ly = (K-I)/L

    zeros = np.zeros((6, cols))

    counters = hoja.loc[:, ["1(i)", "2(i)", "3(i)", "1(j)", "2(j)", "3(j)"]]
    for _, i1, i2, i3, j1, j2, j3 in counters.itertuples(): 


        matrix_tran = np.array([[lx,  ly,    0,    0,    0,    0],
                                [-ly, lx,    0,    0,    0,    0],
                                [0,    0,    1,    0,    0,    0],
                                [0,    0,    0,   lx,   ly,    0],
                                [0,    0,    0,  -ly,   lx,    0],
                                [0,    0,    0,    0,    0,    1]])

        zeros[:, [i1 - 1, i2 - 1, i3 - 1, j1 - 1, j2 - 1 , j3 - 1]] = matrix_tran

1 Ответ

0 голосов
/ 24 марта 2020

Попробуйте с транспонированной матрицей нулей

import pandas as pd
import numpy as np

ex = pd.ExcelFile('c:/tmp/SO/matrix_tr.xlsx')
hoja = ex.parse('Hoja1')
counters = hoja.loc[:, ["1(i)", "2(i)", "3(i)", "1(j)", "2(j)", "3(j)"]]

# zeros matrix transposed
cols = 36
zeros_trans = np.zeros((cols,6))

# last row only
for n in range(14,len(hoja)):

    Xi = hoja['X(i)'][n]  
    Yi = hoja['Y(i)'][n]
    Xj = hoja['X(j)'][n]  
    Yj = hoja['Y(j)'][n]
    X = Xj-Xi
    Y = Yj-Yi
    L = np.sqrt(X**2+Y**2)
    lx = X/L
    ly = Y/L
    matrix_tran = np.array([[lx,  ly,    0,    0,    0,    0],
                           [-ly, lx,    0,    0,    0,    0],
                           [0,    0,    1,    0,    0,    0],
                           [0,    0,    0,   lx,   ly,    0],
                           [0,    0,    0,  -ly,   lx,    0],
                           [0,    0,    0,    0,    0,    1]])

    i = 0
    for r in counters.iloc[n]:
        zeros_trans[r-1] = matrix_tran[i]
        i += 1  

print(np.transpose(zeros_trans))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...