es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python iterar a través de una matriz.

Tengo una función que calcula algunos resultados para todas las combinaciones de los valores en el vector de entrada:

MyFunction(inp_vec):
    ...
    return some_array

inp_vec puede ser una lista de cualquier longitud entre 1 y 6. Por lo tanto, el matriz de salida some_array puede ser de cualquier tamaño entre (1,1) y (6,6), respectivamente.

Para algunos cálculos adicionales, me gustaría ensamblar una matriz de tamaño (6,6), que estaría compuesta inicialmente por todos ceros: A = np.empty([6,6]), y las entradas respectivas, como se calculan por la función, serían reemplazadas por algunos valores.

El problema es que el matriz de salida some_array puede tener un tamaño diferente a (6,6).

Me gustaría usar algo como numerate(), pero dentro de este tipo de for loop:

for i,j in list(itertools.product(inp_vec, inp_vec)):
    A[n,m] = some_array[i, j]

¿Cómo obtengo los iteradores n, m?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener los iteradores n y m, puede utilizar enumerate() dentro del bucle for para iterar sobre las filas y columnas de A.

    Aquí hay un ejemplo de código:

    import numpy as np
    import itertools
    
    def MiFuncion(inp_vec):
        # calcular algunos resultados para todas las combinaciones de valores en inp_vec
        # retornar como un array de numpy de cualquier tamaño
        return some_array
    
    inp_vec = [...] # vector de entrada de cualquier longitud entre 1 y 6
    some_array = MiFuncion(inp_vec)
    
    A = np.zeros([6,6]) # inicializar la matriz de salida como todo ceros
    
    for n, i in enumerate(inp_vec):
        for m, j in enumerate(inp_vec):
            if n < some_array.shape[0] and m < some_array.shape[1]:
                # si some_array tiene suficientes filas y columnas, reemplace A[n,m] con el valor correspondiente
                A[n,m] = some_array[n,m]
    
    print(A)
    

    En este código, enumerate() se utiliza para iterar sobre los índices de inp_vec, y la declaración if verifica si los índices de fila y columna correspondientes existen en some_array antes de asignar su valor a A[n,m].

    Este código debería llenar los valores en A desde some_array donde existan, y dejar los elementos restantes como ceros.

Comments are closed.