如何在 Numpy Python 中将 4 维数组的下三角复制到上三角?
How to copy lower triangle to upper triangle for a 4 dimension array in Numpy Python?
objective是将下三角复制到上三角。
根据 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: Input must be 1- or 2-d.
请问如何处理这个问题?
预期输出如下
[[[0.]],, [[1.]],, [[2.]],, [[3.]]]
[[[1.]],, [[0.]],, [[2.]],, [[3.]]]
[[[2.]],, [[2.]],, [[0.]],, [[3.]]]
[[[3.]],, [[3.]],, [[3.]],, [[0.]]]
在执行三角形复制之前,应用“挤压”以挤压最后两个轴(每个轴的长度为 1)。
这给你留下了一个二维数组。
然后,在执行三角形复制后,重新引入您挤出的轴:
arr = np.squeeze(arr)
arr = arr + arr.T - np.diag(np.diag(arr))
arr = arr[...,None, None]
objective是将下三角复制到上三角。 根据 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: Input must be 1- or 2-d.
请问如何处理这个问题?
预期输出如下
[[[0.]],, [[1.]],, [[2.]],, [[3.]]]
[[[1.]],, [[0.]],, [[2.]],, [[3.]]]
[[[2.]],, [[2.]],, [[0.]],, [[3.]]]
[[[3.]],, [[3.]],, [[3.]],, [[0.]]]
在执行三角形复制之前,应用“挤压”以挤压最后两个轴(每个轴的长度为 1)。
这给你留下了一个二维数组。
然后,在执行三角形复制后,重新引入您挤出的轴:
arr = np.squeeze(arr)
arr = arr + arr.T - np.diag(np.diag(arr))
arr = arr[...,None, None]