Wie kopiere ich das untere Dreieck in das obere Dreieck für ein 4-dimensionales Array in Numpy Python?
Nov 28 2020
Ziel ist es, das untere Dreieck in das obere Dreieck zu kopieren. Auf der Grundlage des im OP erstellten Vorschlags wurde der folgende Code entworfen.
import numpy as np
lw_up_pair = np.tril_indices(4, -1)
arr=np.zeros((4,4,1,1))
arr[1,:1,:,0]=1
arr[2,:2,0,0]=2
arr[3,:3,0,0]=3
arr = arr + arr.T - np.diag(np.diag(arr))
Es gab jedoch einen Fehler
ValueError: Die Eingabe muss 1- oder 2-d sein.
Darf ich wissen, wie ich mit diesem Problem umgehen soll?
Die erwartete Ausgabe ist wie folgt
[[[0.]],, [[1.]],, [[2.]],, [[3.]]]
[[[1.]],, [[0.]],, [[2.]],, [[3.]]]
[[[2.]],, [[2.]],, [[0.]],, [[3.]]]
[[[3.]],, [[3.]],, [[3.]],, [[0.]]]
Antworten
1 fountainhead Nov 28 2020 at 16:32
Wenden Sie vor dem Durchführen Ihrer Dreieckskopie einen "Druck" an, um die letzten beiden Achsen (mit einer Länge von jeweils 1) herauszudrücken.
Dadurch erhalten Sie ein 2-D-Array.
Führen Sie dann nach dem Ausführen Ihrer Dreieckskopie die herausgedrückten Achsen wieder ein:
arr = np.squeeze(arr)
arr = arr + arr.T - np.diag(np.diag(arr))
arr = arr[...,None, None]