Jak skopiować dolny trójkąt do górnego trójkąta dla tablicy 4-wymiarowej w Numpy Python?
Nov 28 2020
Celem jest skopiowanie dolnego trójkąta do górnego trójkąta. W oparciu o sugestię przedstawioną w PO opracowano następujący kod.
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))
Jednak podał błąd
ValueError: Wejście musi mieć wartość 1 lub 2-dni.
Czy mogę wiedzieć, jak rozwiązać ten problem?
Oczekiwany wynik jest taki, jak poniżej
[[[0.]],, [[1.]],, [[2.]],, [[3.]]]
[[[1.]],, [[0.]],, [[2.]],, [[3.]]]
[[[2.]],, [[2.]],, [[0.]],, [[3.]]]
[[[3.]],, [[3.]],, [[3.]],, [[0.]]]
Odpowiedzi
1 fountainhead Nov 28 2020 at 16:32
Przed wykonaniem kopii trójkąta zastosuj „ściśnięcie”, aby wycisnąć dwie ostatnie osie (z których każda ma długość 1).
To pozostawia ci tablicę 2-D.
Następnie, po wykonaniu kopii trójkąta, wprowadź ponownie osie, które wycisnąłeś:
arr = np.squeeze(arr)
arr = arr + arr.T - np.diag(np.diag(arr))
arr = arr[...,None, None]