Powiedzmy, że mam tablicę

a = np.arange(16).reshape((4,4))

0   1  2   3
4   5  6   7
8   9  10  11
12  13 14  15

Ale ja chcę

15  11  7  3
14  10  6  2
13  9   5  1
12  8   4  0

Który jest odwróconym przekątną wtórną lub rodzaj anty-transpozycji.

Jak mogę to zrobić w numpry?

11
Jaden Travnik 27 czerwiec 2017, 07:50

3 odpowiedzi

Najlepsza odpowiedź

Można wykonać jedną z następujących czynności:

rot90(a,2).T

rot90(flipud(a),1)

rot90(fliplr(a), -1)

Lub jako Hpaulj sugerowany w komentarzach (dzięki HPaulj)

a[::-1,::-1].T

Oto rankingi prędkości jako proporcje najwolniejszego sposobu po przeładunku 1000 macierzy losowych 10000x10000.

  1. 63,5% - a[::-1,::-1].T
  2. 85,6% - rot90(a,2).T
  3. 97,8% - rot90(flipud(a),1)
  4. 100% - {x0}}
10
Jaden Travnik 27 czerwiec 2017, 05:43

Spróbuj tego w ten sposób,

np=np[::-1] #reverse the array
a = np.arange(16).reshape((4,4))
0
Omi Harjani 27 czerwiec 2017, 07:09

Oto inny, aby wrzucić do mieszanki.

a.ravel('F')[::-1].reshape(a.shape)
1
piRSquared 27 czerwiec 2017, 06:39