寸法に注意してください。
しましょう
x # initial numpy array
I = np.argsort(x) or I = x.argsort()
y = np.sort(x) or y = x.sort()
z # reverse sorted array
完全リバース
z = x[-I]
z = -np.sort(-x)
z = np.flip(y)
flip
で変更され1.15
、以前のバージョンが必要でした。ソリューション:。1.14
axis
pip install --upgrade numpy
最初の次元を反転
z = y[::-1]
z = np.flipud(y)
z = np.flip(y, axis=0)
2番目の次元を反転
z = y[::-1, :]
z = np.fliplr(y)
z = np.flip(y, axis=1)
テスト中
100×10×10アレイで1000回テスト。
Method | Time (ms)
-------------+----------
y[::-1] | 0.126659 # only in first dimension
-np.sort(-x) | 0.133152
np.flip(y) | 0.121711
x[-I] | 4.611778
x.sort() | 0.024961
x.argsort() | 0.041830
np.flip(x) | 0.002026
これは主にでなく、インデックスの再作成によるものargsort
です。
# Timing code
import time
import numpy as np
def timeit(fun, xs):
t = time.time()
for i in range(len(xs)): # inline and map gave much worse results for x[-I], 5*t
fun(xs[i])
t = time.time() - t
print(np.round(t,6))
I, N = 1000, (100, 10, 10)
xs = np.random.rand(I,*N)
timeit(lambda x: np.sort(x)[::-1], xs)
timeit(lambda x: -np.sort(-x), xs)
timeit(lambda x: np.flip(x.sort()), xs)
timeit(lambda x: x[-x.argsort()], xs)
timeit(lambda x: x.sort(), xs)
timeit(lambda x: x.argsort(), xs)
timeit(lambda x: np.flip(x), xs)
temp[::-1].sort()
それが逆の順序でソートする必要があることをどうやって知っていますか?私がそれを読む方法は、元の配列を逆にし、次にそれを(昇順で)ソートします。元の配列を逆にして(ランダムな順序で)、昇順で並べ替えると、配列が逆の順序で返されるのはなぜですか?