Comment copier le triangle inférieur vers le triangle supérieur pour un tableau à 4 dimensions dans Numpy Python?

Nov 28 2020

L'objectif est de copier le triangle inférieur vers le triangle supérieur. Sur la base de la suggestion produite dans le PO , le code suivant a été rédigé.

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))

Cependant, il a donné une erreur

ValueError: l'entrée doit être 1 ou 2 d.

Puis-je savoir comment gérer ce problème?

Le résultat attendu est comme ci-dessous

[[[0.]],, [[1.]],, [[2.]],, [[3.]]]
[[[1.]],, [[0.]],, [[2.]],, [[3.]]]
[[[2.]],, [[2.]],, [[0.]],, [[3.]]]
[[[3.]],, [[3.]],, [[3.]],, [[0.]]]

Réponses

1 fountainhead Nov 28 2020 at 16:32

Avant d'effectuer votre copie de triangle, appliquez une "pression" pour faire sortir les deux derniers axes (qui ont une longueur de 1 chacun).

Cela vous laisse avec un tableau 2-D.

Ensuite, après avoir effectué votre copie de triangle, réintroduisez les axes que vous aviez pressés:

arr = np.squeeze(arr)
arr = arr + arr.T - np.diag(np.diag(arr))
arr = arr[...,None, None]