Como copiar o triângulo inferior para o triângulo superior para uma matriz de 4 dimensões em Numpy Python?

Nov 28 2020

O objetivo é copiar o triângulo inferior para o triângulo superior. Com base na sugestão produzida no OP , foi elaborado o seguinte 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))

No entanto, deu um erro

ValueError: A entrada deve ser 1- ou 2-d.

Posso saber como lidar com esse problema?

A saída esperada é como abaixo

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

Respostas

1 fountainhead Nov 28 2020 at 16:32

Antes de fazer sua cópia do triângulo, aplique um "aperto" para espremer os dois últimos eixos (que têm comprimento de 1 cada).

Isso deixa você com uma matriz 2-D.

Então, depois de fazer sua cópia do triângulo, re-introduza os eixos que você espremeu:

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