Как сделать поворот матрицы в одну строчку без numpy и циклов?
Например если исходная матрица
[[1, 2],
[3, 4]]
то результирующая должна быть:
[[3, 1],
[4, 2]]
Ответ
Вполне себе рабочий вариант, если скорость не критична.
Но если есть требования по скорости обработки, то лучше все-таки воспользоваться NumPy.
Сравнение производительности для массива 100x100:
In [72]: a = np.random.randint(0, 99, (100, 100))
In [73]: m = a.tolist()
In [74]: a.shape
Out[74]: (100, 100)
In [75]: %timeit tuple(zip(*m[::-1]))
10000 loops, best of 3: 71 µs per loop
In [76]: %timeit np.rot90(a, 3)
The slowest run took 9.64 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 2.63 µs per loop
Сравнение производительности для массива 1000x1000:
In [77]: a = np.random.randint(0, 99, (1000, 1000))
In [78]: m = a.tolist()
In [79]: a.shape
Out[79]: (1000, 1000)
In [80]: %timeit tuple(zip(*m[::-1]))
10 loops, best of 3: 32.6 ms per loop
In [81]: %timeit np.rot90(a, 3)
The slowest run took 7.54 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 2.59 µs per loop
Сравнение производительности для массива 10000x10000:
In [82]: a = np.random.randint(0, 99, (10000, 10000))
In [83]: m = a.tolist()
In [84]: a.shape
Out[84]: (10000, 10000)
In [85]: %timeit tuple(zip(*m[::-1]))
1 loop, best of 3: 4.43 s per loop
In [86]: %timeit np.rot90(a, 3)
The slowest run took 11.29 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 2.59 µs per loop
Комментариев нет:
Отправить комментарий