Заменить нули массива списком - PullRequest
0 голосов
/ 25 марта 2020

Я создал список с именем ingreso_datos , в котором я ввожу информацию, учтите, что при работе с циклами for в моих переменных я отображаю результат последнего списка, то есть элемента 15. Объяснение изображение здесь: изображение , здесь я оставляю Excel: ejercicio_e c

Я создал массив нулей 36x36, плюс я создал еще один список с именем counters , который сообщает мне строки и столбцы, которым я должен заменить нули моего ранее созданного массива.

Значения, которые я собираюсь заменить в матрице нулей, задаются другой матрицей , эта матрица 6x6, называемая la_matriz .

Моя проблема заключается в том, что когда я делаю это с помощью для l oop, я получаю AttributeError: объект 'list' не имеет атрибута 'intertuples' .

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

И извините, мой Engli sh, Это это не мой родной язык.

import pandas as pd
import numpy as np

base = pd.ExcelFile('ejercicio_ec.xlsx')

ingreso_datos = [[ 1,    'W',    28,    29,    30,    19,    20,     21,      0,      0,      0,    2.5,    'xh24',    10],
                 [ 2,    'W',    31,    32,    33,    22,    23,      24,    4.5,      0,    4.5,    2.5,    'xh24',    10],
                 [ 3,    'W',    34,    35,    36,    25,    26,      27,    9.5,      0,    9.5,    2.5,    'xh24',    10],
                 [ 4,    'W',    19,    20,    21,    10,    11,      12,      0,    2.5,      0,      5,    'xh24',    10],
                 [ 5,    'W',    22,    23,    24,    13,    14,     15,    4.5,    2.5,    4.5,      5,    'xh24',    10],
                 [ 6,    'W',    25,    26,    27,     6,    17,      18,    9.5,    2.5,    9.5,      5,    'xh24',    10],
                 [ 7,    'W',    10,    11,    12,     1,     2,       3,      0,      5,      0,    7.5,    'xh24',    10],
                 [ 8,    'W',    13,    14,    15,     4,     5,       6,    4.5,      5,    4.5,    7.5,    'xh24',    10],
                 [ 9,    'W',    16,    17,    18,     7,     8,       9,    9.5,      5,    9.5,    7.5,    'xh24',    10],
                 [10,    'X',      19,    20,    21,    22,    23,       24,      0,    2.5,    4.5,    2.5,    'xh24',    10],
                 [11,    'X',      22,    23,    24,    25,    26,       27,    4.5,    2.5,    9.5,    2.5,    'xh24',    10],
                 [12,    'X',      10,    11,    12,    13,    14,       15,      0,      5,    4.5,      5,    'xh24',    10],
                 [13,    'X',      13,    14,    15,    16,    17,       18,    4.5,      5,    9.5,      5,    'xh24',    10],
                 [14,    'X',       1,     2,     3,     4,     5,        6,      0,    7.5,    4.5,    7.5,    'xh24',    10],
                 [15,    'X',       4,     5,     6,     7,     8,        9,    4.5,    7.5,    9.5,    7.5,    'xh24',    10]]


propies = []

for i in range(len(ingreso_datos)):
    if ingreso_datos[i][12] == 'xh24':
        Data = base.parse('xh24')

    for j in range(len(Data)):
        if ingreso_datos[i][13] == Data.values[j][0]:
            propies.append([Data.values[j][1], Data.values[j][2], Data.values[j][3]]) 

counters = []

for i in range(len(ingreso_datos)):

    b = propies [i][0]            
    c = propies [i][1]            
    d = propies [i][2]           
    e = np.sqrt((ingreso_datos[i][10]-ingreso_datos[i][8])**2+(ingreso_datos[i][11]-ingreso_datos[i][9])**2)    

    La_matriz = np.array([[ b*c/e,            0,           0,    -b*c/e,           0,            0],
                       [     0,     c*d/e**3,    c*d/e**2,         0,    c*d/e**3,     c*d/e**2],
                       [     0,     c*d/e**2,       c*d/e,         0,     c*d/e**2,      c*d/e],
                       [-b*c/e,            0,           0,     b*c/e,           0,           0],
                       [     0,     c*d/e**3,    c*d/e**2,         0,     c*d/e**3,    c*d/e**2],
                       [     0,     c*d/e**2,       c*d/e,         0,      c*d/e**2,    c*d/e]])


    # Matrix de zeros
    ceros_grande = np.zeros((36,36)) 

    counters.append([ingreso_datos[i][2], ingreso_datos[i][3], ingreso_datos[i][4],
                     ingreso_datos[i][5], ingreso_datos[i][6], ingreso_datos[i][7]])


    for _, i1, i2, i3, j1, j2, j3 in counters():

        ceros_grande[:, [i1,i2,i3,j1,j2,j3]] = La_matriz

1 Ответ

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

Мне не нравится, когда люди что-то спрашивают, а потом другие отвечают «почему бы вам не попробовать то или это», но почему бы вам не попробовать np.where()?

Это может вернуться Вы индексы матрицы, которые имеют значение c.

>>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8])
>>> numpy.where(x == 0)[0]
array([1, 3, 5]

см. этот пост для справки. Это может быть более эффективным и менее болезненным.

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