给定3D数组
arr
,我希望将所有对角线元素填充为1
。np.random.seed(0)
arr=np.random.rand(3,4,4)
期望输出结果
1,0.71519,0.60276,0.54488
0.42365,1,0.43759,0.89177
0.96366,0.38344,1,0.52889
0.56804,0.92560,0.07104,1
1,0.83262,0.77816,0.87001
0.97862,1,0.46148,0.78053
0.11827,0.63992,1,0.94467
0.52185,0.41466,0.26456,1
1,0.56843,0.01879,0.61764
0.61210,1,0.94375,0.68182
0.35951,0.43703,1,0.06023
0.66677,0.67064,0.21038,1
将 fill_diagonal
设置如下
arr=np.fill_diagonal(arr, 1)
返回一个错误
ValueError:输入的所有维度必须相等
请问如何正确地为3D数组填充对角线等于1的值?
到目前为止尝试了什么
arr [:,:,0] = np.diag((1,1))
ValueError:无法将形状为(2,2)的输入数组广播到形状为(3,4)
需要避免的问题
使用for-loop
和fill_diagonal
函数
np.einsum
:np.einsum('ijj->ij', arr)[:] = 1.0
- Michael Szczesny