import numpy as np
matrices=[np.random.random((5,5)) for i in range(10)]
np.max(np.hstack(matrices))
Даст вам максимальное значение из всех n матриц. Это в основном объединяет все матрицы в matrices
в один массив, используя np.hstack
, а затем берет максимум этого нового массива. Это предполагает, что все ваши матрицы имеют одинаковое количество строк. Вы также можете использовать np.vstack
или np.concatenate
для достижения аналогичного эффекта.
Редактировать Я перечитал ваш вопрос, и вы, возможно, захотите что-то более похожее на:
np.max(np.dstack(matrices),axis=2)
Это позволит сложить все ваши матрицы вдоль третьей оси, а затем даст вам максимум в этом направлении, возвращая матрицу 5x5 для вашего случая.
Редактировать # 2 Вот некоторые моменты:
In [33]: matrices = [np.random.random((5,5)) for i in range(10)]
In [34]: %timeit np.dstack(matrices).max(2)
10000 loops, best of 3: 92.6 us per loop
In [35]: %timeit np.array(matrices).max(axis=0)
10000 loops, best of 3: 90.9 us per loop
In [36]: %timeit reduce(np.maximum, matrices)
10000 loops, best of 3: 25.8 us per loop
и для некоторых больших массивов:
In [37]: matrices = [np.random.random((200,200)) for i in range(100)]
In [38]: %timeit np.dstack(matrices).max(2)
10 loops, best of 3: 111 ms per loop
In [39]: %timeit np.array(matrices).max(axis=0)
1 loops, best of 3: 697 ms per loop
In [40]: %timeit reduce(np.maximum, matrices)
100 loops, best of 3: 12.7 ms per loop
Стивен выигрывает!