unir una transpuesta multiplicar matriz matrices funcion elementos ejemplos crear array agregar python arrays numpy

multiplicar - transpuesta de una matriz en python numpy



Fusionar una lista de matrices numpy en una matriz(rĂ¡pido) (1)

¿Cuál sería la forma más rápida de combinar una lista de matrices numpy en una matriz si uno conoce la longitud de la lista y el tamaño de las matrices, que es la misma para todas?

Probé dos enfoques:

A se puede ver que vstack es más rápido, pero por alguna razón, la primera ejecución es tres veces más larga que la segunda. Supongo que esto es causado por (falta) preallocation . Entonces, ¿cómo preasignar una matriz para vstack ? ¿O conoces un método más rápido?

¡Gracias!

[ACTUALIZAR]

Quiero (25280, 320) no (80, 320, 320) que significa que merged_array = array(list_of_arrays) no funcionará para mí. Gracias Joris por señalar eso!

Salida:

0.547468900681 s merged_array = array(first_list_of_arrays) 0.547191858292 s merged_array = array(second_list_of_arrays) 0.656183958054 s vstack first 0.236850976944 s vstack second

Código:

import numpy import time width = 320 height = 320 n_matrices=80 secondmatrices = list() for i in range(n_matrices): temp = numpy.random.rand(height, width).astype(numpy.float32) secondmatrices.append(numpy.round(temp*9)) firstmatrices = list() for i in range(n_matrices): temp = numpy.random.rand(height, width).astype(numpy.float32) firstmatrices.append(numpy.round(temp*9)) t1 = time.time() first1=numpy.array(firstmatrices) print time.time() - t1, "s merged_array = array(first_list_of_arrays)" t1 = time.time() second1=numpy.array(secondmatrices) print time.time() - t1, "s merged_array = array(second_list_of_arrays)" t1 = time.time() first2 = firstmatrices.pop() for i in range(len(firstmatrices)): first2 = numpy.vstack((firstmatrices.pop(),first2)) print time.time() - t1, "s vstack first" t1 = time.time() second2 = secondmatrices.pop() for i in range(len(secondmatrices)): second2 = numpy.vstack((secondmatrices.pop(),second2)) print time.time() - t1, "s vstack second"


Tienes 80 matrices 320x320? Así que probablemente quieras usar dstack :

first3 = numpy.dstack(firstmatrices)

Esto devuelve una matriz de 80x320x320 como lo hace numpy.array(firstmatrices) :

timeit numpy.dstack(firstmatrices) 10 loops, best of 3: 47.1 ms per loop timeit numpy.array(firstmatrices) 1 loops, best of 3: 750 ms per loop

Si desea usar vstack , devolverá una matriz de 25600x320:

timeit numpy.vstack(firstmatrices) 100 loops, best of 3: 18.2 ms per loop