können Sie modulus
verwenden Rampen von 0
bis 2n
beginnen zu erstellen und dann die ersten n
von jedem dieser Rampe aus. Somit hätten wir für jede Rampe zuerst n
als True
und als False
einen booleschen Array, der die gesamte Länge des Arrays abdeckt. Dann verwenden wir einfach boolean indexing
entlang der Spalten, um die gültigen Spalten für die endgültige Ausgabe auszuwählen. Somit würde die Umsetzung in etwa so aussehen -
arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Schritt für Schritt Code ausgeführt wird eine bessere Vorstellung zu geben -
In [43]: arr
Out[43]:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
In [44]: n = 3
In [45]: np.mod(np.arange(arr.shape[-1]),2*n)
Out[45]: array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3])
In [46]: np.mod(np.arange(arr.shape[-1]),2*n)<n
Out[46]: array([ True,True,True,False,False,False,True,True,True,False])
In [47]: arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Out[47]:
array([[ 1, 2, 3, 7, 8, 9],
[11, 12, 13, 17, 18, 19]])
Probe läuft über verschiedene n
-
In [29]: arr
Out[29]:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
In [30]: n = 1
In [31]: arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Out[31]:
array([[ 1, 3, 5, 7, 9],
[11, 13, 15, 17, 19]])
In [32]: n = 2
In [33]: arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Out[33]:
array([[ 1, 2, 5, 6, 9, 10],
[11, 12, 15, 16, 19, 20]])
In [34]: n = 3
In [35]: arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Out[35]:
array([[ 1, 2, 3, 7, 8, 9],
[11, 12, 13, 17, 18, 19]])
Thank you! Nur eine kleine Frage, gibt es einen bestimmten Grund, warum Sie 'arr.shape [-1]' und nicht 'arr.shape [1]' verwenden? –
@ Jean-BaptisteMartin Ich denke, ich hatte ein generisches NDarray im Kopf, so dass es für Arrays mit beliebigen Dimensionen für die Auswahl von Spalten funktionieren würde, was immer die letzte Dimension wäre. – Divakar
Vielleicht ist es bemerkenswert, dass dies und so ziemlich jede andere Art, das gewünschte Ergebnis zu erzielen, ein neues Array (kopiert die Daten) statt einer Ansicht des ursprünglichen Arrays erzeugt. – Dunes