讓A
是numpy的陣列,如:重複數組的每一個值的兩倍(numpy的)
A = np.array([1, 2, 3, 4, 5])
我想找到生產與每個值的新陣列的更清潔的方式重複了兩次:
B = np.array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
您認爲這是更簡單的方法嗎?
import numpy as np
B = np.tile(A,2).reshape(2,-1).flatten('F')
讓A
是numpy的陣列,如:重複數組的每一個值的兩倍(numpy的)
A = np.array([1, 2, 3, 4, 5])
我想找到生產與每個值的新陣列的更清潔的方式重複了兩次:
B = np.array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
您認爲這是更簡單的方法嗎?
import numpy as np
B = np.tile(A,2).reshape(2,-1).flatten('F')
您可以使用numpy.column_stack
和numpy.ndarray.flatten
:
In [12]: numpy.column_stack((A, A)).flatten()
Out[12]: array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
時機比較:
In [27]: A = numpy.array([1, 2, 3, 4, 5]*1000)
In [28]: %timeit numpy.column_stack((A, A)).flatten()
10000 loops, best of 3: 44.7 µs per loop
In [29]: %timeit numpy.repeat(A, 2)
10000 loops, best of 3: 104 µs per loop
In [30]: %timeit numpy.tile(A,2).reshape(2,-1).flatten('F')
10000 loops, best of 3: 129 µs per loop
使用repeat()
In [1]: import numpy as np
In [2]: A = np.array([1, 2, 3, 4, 5])
In [3]: np.repeat(A,2)
Out[3]: array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
如果你需要在一個時間關鍵區域做此操作,下面的代碼是最快的(使用numpy的1.9開發版):
In [1]: A = numpy.array([1, 2, 3, 4, 5]*1000)
In [2]: %timeit numpy.array([A, A]).T.ravel('F')
100000 loops, best of 3: 6.44 µs per loop
需要注意的是扁平化將使額外的副本,所以拉威爾應改爲使用。
如果你喜歡的可讀性,在column_stack和重複功能更好:
In [3]: %timeit numpy.column_stack((A, A)).ravel()
100000 loops, best of 3: 15.4 µs per loop
In [4]: timeit numpy.repeat(A, 2)
10000 loops, best of 3: 53.9 µs per loop
謝謝你的時間比較。你還可以粘貼完整的代碼進行時間比較嗎? (帶'import timeit'等) – Basj
@Basj這就是整個代碼:),我用這個[IPython shell](http://ipython.org/ipython-doc/dev/interactive/shell.html)。您也可以在線嘗試:https://www.pythonanywhere.com/try-ipython/ –
不知道爲什麼,但我得到了不同的時間順序(對於x10尺寸A): In [19]:% timeit numpy.column_stack((A,A))。flatten() 1000個循環,最好是3:每個循環657 us In [20]:%timeit numpy.tile(A,2).reshape(2, - 1).flatten('F') 1000循環,最好爲3:574 us每個循環 –