目标是将下三角形复制到上三角形。 根据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)。
这给你留下了一个二维数组。
然后,在执行三角形复制后,重新引入您挤出的轴:
arr = np.squeeze(arr)
arr = arr + arr.T - np.diag(np.diag(arr))
arr = arr[...,None, None]
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
print(arr.shape)#(4, 4, 1, 1)
symmetric_matrix = arr + arr.T
diagonal_value = arr[0, 0, 0, 0] # Get the first element (diagonal value)
np.fill_diagonal(symmetric_matrix, diagonal_value)
#change the diagonal to the Original matrix
print(symmetric_matrix.shape)#(4, 4, 4, 4)
print(symmetric_matrix)
'''
[[[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]]
[[[1. 2. 3. 4.]
[1. 1. 3. 4.]
[1. 1. 1. 4.]
[1. 1. 1. 1.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]]
[[[2. 3. 4. 5.]
[2. 2. 4. 5.]
[2. 2. 2. 5.]
[2. 2. 2. 2.]]
[[2. 3. 4. 5.]
[2. 2. 4. 5.]
[2. 2. 2. 5.]
[2. 2. 2. 2.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]]
[[[3. 4. 5. 6.]
[3. 3. 5. 6.]
[3. 3. 3. 6.]
[3. 3. 3. 3.]]
[[3. 4. 5. 6.]
[3. 3. 5. 6.]
[3. 3. 3. 6.]
[3. 3. 3. 3.]]
[[3. 4. 5. 6.]
[3. 3. 5. 6.]
[3. 3. 3. 6.]
[3. 3. 3. 3.]]
[[0. 1. 2. 3.]
[0. 0. 2. 3.]
[0. 0. 0. 3.]
[0. 0. 0. 0.]]]]
'''