¿Cómo copiar el triángulo inferior al triángulo superior para una matriz de 4 dimensiones en Numpy Python?

Nov 28 2020

El objetivo es copiar el triángulo inferior al triángulo superior. Basado en la sugerencia producida en el PO , se redactó el siguiente código.

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

Sin embargo, dio un error

ValueError: la entrada debe ser 1 o 2-d.

¿Puedo saber cómo manejar este problema?

La salida esperada es la siguiente

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

Respuestas

1 fountainhead Nov 28 2020 at 16:32

Antes de realizar su copia triangular, aplique un "apretón" para exprimir los dos últimos ejes (que tienen una longitud de 1 cada uno).

Esto te deja con una matriz 2-D.

Luego, después de realizar su copia triangular, vuelva a introducir los ejes que había extraído:

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