Betrachtet man einen 3D numpy Array schneiden:Wie ein 3D ndarray mit einem Indexvektor
ax1, ax2, ax3 = 3, 3, 2
arr = np.asarray(range(ax1*ax2*ax3)).reshape([ax1, ax2, ax3])
arr: [[[0, 1], [2, 3], [4, 5]],
[[6, 7], [8, 9], [10, 11]],
[[12, 13], [14, 15], [16, 17]]]
und einen Indexvektor idx = [0, 1, 2]
.
Ich möchte das Array arr
mit idx
durch die folgende Aussage schneiden:
res = [arr[i, :idx[i]+1] for i in range(ax1)]
res: [[[0, 1]],
[[6, 7], [8, 9],
[[12, 13], [14, 15], [16, 17]]]
Aber diese Art des Schneidens kompliziert aussieht.
Unterstützt numpy einen solchen Vorgang ohne Schleife? Ich suche nach etwas wie arr[range(ax1), :idx+1]
.
Gibt es einen besonderen Grund, nach einer "einfachen" Lösung zu suchen? Ist Effizienz in Bezug auf die Leistung ein relevantes Thema? – Divakar
Ich möchte nur nach einem nackten Slicing-Vorgang suchen, ohne Schleifen zu verwenden. – fishiwhj
Wäre dein 'idx' immer' [0, 1, 2] '? – Divakar