在某些单元格中用其他值替换为零的数组_更新的问题

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

我需要解决一个花费了数小时的问题,利用我的excel工作表中的数据,我创建了一个6x36''零点''零点矩阵和6x6''矩阵_tran''坐标转换矩阵[image 1] 。enter image description here

我的问题是我找不到一种用矩阵``matrix_tran''规定的值替换``zeros''矩阵的零值的方法,并且其位置必须在列中(4,5 ,6,7,8,9)由Excel工作表元素15的连接向量(4,5,6,7,8,9)给出,也就是for循环迭代的最后一行[image 2]。enter image description here

总结:在下面,我显示了它的适合度和外观[分别为图3和图4]。enter image description here

非常感谢您的帮助,请原谅我的英语,但这不是我的母语,这是一个很好的问候。

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
python excel pandas dataframe matrix
1个回答
0
投票

尝试使用转置零矩阵

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))
© www.soinside.com 2019 - 2024. All rights reserved.