Numpy Pythonで4次元配列の下三角形を上三角形にコピーするにはどうすればよいですか?

Nov 28 2020

目的は、下の三角形を上の三角形にコピーすることです。OPで作成された提案に基づいて、次のコードが作成されました。

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

しかし、それはエラーを与えました

ValueError:入力は1次元または2次元である必要があります。

この問題の処理方法を教えてください。

期待される出力は以下のとおりです

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

回答

1 fountainhead Nov 28 2020 at 16:32

三角形のコピーを実行する前に、「スクイーズ」を適用して、最後の2つの軸(それぞれの長さが1)を絞り出します。

これにより、2次元配列が残ります。

次に、三角形のコピーを実行した後、絞り出した軸を再導入します。

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