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.

Bucle por lotes sobre un arreglo de Python para crear un nuevo arreglo sin sobrescribir.

Quiero iterar sobre una matriz tridimensional (sequences) con forma (1134500, 1, 50)

Para hacer esto, utilizo el siguiente bucle for, que funciona bien excepto por sobrescribir los resultados del lote anterior:

batchsize = 500

for i in range(0, sequences.shape[0], batchsize):
batch = sequences[i:i+batchsize]
relevancias = lrp_model.lrp(batch)

Como resultado, quiero una matriz (relevancias) con forma (1134500, 1, 50), pero obtengo una con forma (500, 1, 50)
¿Alguien puede decirme qué está saliendo mal?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema en el código proporcionado es que el arreglo “relevances” es sobrescrito en cada iteración del ciclo. Por lo tanto, solo almacena los resultados del último lote procesado, lo que resulta en una salida de forma (500, 1, 50).

    Para solucionar esto, puedes crear un arreglo vacío del tamaño deseado antes del ciclo y agregar los resultados de cada lote utilizando el índice de la iteración. Aquí hay un ejemplo:

    batchsize = 500
    relevances = np.empty(sequences.shape)
    
    for i in range(0, sequences.shape[0], batchsize):
       batch = sequences[i:i+batchsize]
       relevances[i:i+batchsize] = lrp_model.lrp(batch)
    

    Este código debería darte la salida deseada de un arreglo con forma (1134500, 1, 50), con los resultados de cada lote agregados al arreglo “relevances”.

Comments are closed.