我有一個包含行的大型10,000,000+長度的數組。我需要單獨洗牌這些行。例如:每行numpy的快速列洗牌
[[1,2,3]
[1,2,3]
[1,2,3]
...
[1,2,3]]
到
[[3,1,2]
[2,1,3]
[1,3,2]
...
[1,2,3]]
我目前使用
map(numpy.random.shuffle, array)
但它是一個Python(不與NumPy)循環和它採取的我的執行時間的99%。可悲的是,PyPy JIT沒有實現numpypy.random
,所以我運氣不好。有沒有更快的方法?我願意用任何庫(pandas
,scikit-learn
,scipy
,theano
等,只要它使用一個numpy的ndarray
或衍生物。)
如果不是這樣,我想我會求助於用Cython或C++。
'numpy.apply_along_axis(numpy.random.shuffle,1,array)'可能會快一點。我沒有計時。 – user2357112
謝謝,我會研究它。 – PythonNut
它實際上是一個很好的處理(≈10x),因爲它需要一個內存拷貝('shuffle'已經到位,所以你需要使用'permutation'來代替)。 – PythonNut