import numpy as np
matrices=[np.random.random((5,5)) for i in range(10)]
np.max(np.hstack(matrices))
會給你所有n個矩陣的最大值。這基本上使用np.hstack
將matrices
中的所有矩陣合併到一個數組中,然後獲取該新數組的最大值。這假定所有的矩陣都有相同的行數。您也可以使用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
史蒂芬獲勝!
+1這非常棒,比Justin或我的答案快一點,特別是對於大型矩陣。 – JoshAdel
這正是我所期待的!感謝你們。 –
我覺得很奇怪,np.maximum.reduce(矩陣)比這慢。我敢打賭,numpy首先使用np.array轉換矩陣。 –