Unter der Annahme, dass A
wird ein Array mit Form (m, n, n) (dh A
kann interpretiert werden als eine Sammlung von m
Arrays mit Form), hier ist eine schnelle Methode, die eine Ansicht des Eingangszurückgibt:
In [14]: from numpy.lib.stride_tricks import as_strided
In [15]: def diags(a):
....: b = as_strided(a, strides=(a.strides[0], a.strides[1]+a.strides[2]), shape=(a.shape[0], a.shape[1]))
....: return b
....:
In [16]: a
Out[16]:
array([[[8, 6, 6, 5],
[1, 0, 3, 5],
[8, 1, 6, 7],
[2, 8, 7, 1]],
[[0, 8, 8, 0],
[1, 4, 2, 4],
[1, 4, 5, 6],
[2, 5, 2, 7]],
[[5, 2, 5, 2],
[2, 5, 7, 6],
[6, 5, 1, 8],
[7, 6, 5, 8]]])
In [17]: diags(a)
Out[17]:
array([[8, 0, 6, 1],
[0, 4, 5, 7],
[5, 5, 1, 8]])
Wenn ich der Rückgabewert sagen ist ein Ansicht, ich meine, es bezieht sich auf den gleichen zugrunde liegenden Speicher wie die Eingabe. Wenn Sie später den Rückgabewert direkt ändern, ändert sich auch die ursprüngliche Eingabe. Zum Beispiel
In [24]: d = diags(a)
In [25]: d[0, :] = 99
In [26]: a[0]
Out[26]:
array([[99, 6, 6, 5],
[ 1, 99, 3, 5],
[ 8, 1, 99, 7],
[ 2, 8, 7, 99]])
Bitte erweitern Sie, was "A" ist. Gehen Sie davon aus, dass es sich um eine "n * m * m" -Matrix handelt? –
@ evan058 Ja, ich habe versucht, diese Annahme mit der ersten Zeile meiner diagonal() -Funktion zu kommunizieren. – dshin