a
als Eingangs Array Unter der Annahme, in die Werte hinzugefügt werden sollen und val
ist der skalare Wert hinzugefügt werden, können Sie einen Ansatz verwenden, der für jede funktioniert mehrdimensionales Array a
mit broadcasting
und . Hier ist die Umsetzung -
shp = a.shape # Get shape
# Get an array of 1-higher dimension than that of 'a' with vals placed at each
# "incrementing" index along the entire length(.size) of a and add to a
out = a + val*np.identity(a.size).reshape(np.append(-1,shp))
Probelauf -
In [437]: a
Out[437]:
array([[[8, 1],
[0, 5]],
[[3, 2],
[5, 1]]])
In [438]: val
Out[438]: 20
In [439]: out
Out[439]:
array([[[[ 28., 1.],
[ 0., 5.]],
[[ 3., 2.],
[ 5., 1.]]],
[[[ 8., 21.],
[ 0., 5.]],
[[ 3., 2.],
[ 5., 1.]]],
[[[ 8., 1.],
[ 20., 5.]],
[[ 3., 2.],
[ 5., 1.]]],
[[[ 8., 1.],
[ 0., 25.]],
[[ 3., 2.],
[ 5., 1.]]],
[[[ 8., 1.],
[ 0., 5.]],
[[ 23., 2.],
[ 5., 1.]]], ....
Wenn Sie separate Arrays von out
zu erstellen, können Sie einen zusätzlichen Schritt verwenden: np.array_split(out,a.size)
. Aus Gründen der Effizienz würde ich jedoch raten, die Indexierung zu verwenden, um auf alle Submatrizen wie out[0]
(für die erste Untermatrix), out[1]
(für die zweite Untermatrix) und so weiter zuzugreifen.