In [1]: arr=np.arange(16).reshape(4,4)
In [2]: arr
Out[2]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Eine relativ einfach Art und Weise, dies zu tun - im Uhrzeigersinn ist:
In [5]: alist=[arr[0,:-1], arr[:-1,-1], arr[-1,::-1], arr[-2:0:-1,0]]
In [6]: alist
Out[6]: [array([0, 1, 2]), array([ 3, 7, 11]), array([15, 14, 13, 12]), array([8, 4])]
In [7]: np.concatenate(alist)
Out[7]: array([ 0, 1, 2, 3, 7, 11, 15, 14, 13, 12, 8, 4])
In gewisser Weise ist es eine Schleife, in dass ich 4 Scheiben bauen. Aber wenn 4 im Vergleich zu n
klein ist, ist das ein kleiner Preis. Es muss auf einer bestimmten Ebene verketten.
Wenn Reihenfolge nicht wichtig ist, könnten wir die Scheiben etwas vereinfachen (z.B. die umgekehrte Reihenfolge vergessen, usw.).
alist=[arr[0,:], arr[1:,-1], arr[-1,:-1], arr[1:-1,0]]
Wenn ich nicht um scherte oder Doppel die Ecken zu zählen konnte ich verwenden:
np.array([arr[[0,n],:], arr[:,[0,n]].T]).ravel()
die doppelten Ecken beseitigen
In [18]: np.concatenate((arr[[0,n],:].ravel(), arr[1:-1,[0,n]].ravel()))
Out[18]: array([ 0, 1, 2, 3, 12, 13, 14, 15, 4, 7, 8, 11])
ist die Reihenfolge wichtig? –
Nein, zum Glück nicht in meinem Fall :) –