注意尺寸。
让
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)
逆向二维
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()
知道它必须以相反的顺序排序呢?我的阅读方式是:反转原始数组,然后对其进行排序(以升序排列)。为什么要反转原始数组(以随机顺序出现)然后按升序排序将数组以反转顺序返回?