Python numpy填充三维阵列的对角线0
假设我有一个3D数组,如何将前二维的对角线填充为零。比如说Python numpy填充三维阵列的对角线0,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,假设我有一个3D数组,如何将前二维的对角线填充为零。比如说 a = np.random.rand(2,2,3) for i in range(3): np.fill_diagonal(a[:,:,i], 0) 有没有办法替换for循环?np.diag函数返回一个2D对角矩阵 a[:,:,0] = np.diag((1,1)) 以下是解决方案之一 a = np.random.rand(2,2,3) np.einsum('iij->ij',a)[...] = 0 为对角线编制索引
a = np.random.rand(2,2,3)
for i in range(3):
np.fill_diagonal(a[:,:,i], 0)
有没有办法替换for循环?np.diag函数返回一个2D对角矩阵
a[:,:,0] = np.diag((1,1))
以下是解决方案之一
a = np.random.rand(2,2,3)
np.einsum('iij->ij',a)[...] = 0
为对角线编制索引很容易-只需对两个维度使用相同的索引数组即可。因此,我们刚刚设置的0是:
In [8]: idx=np.arange(2)
In [9]: a[idx,idx,:]
Out[9]:
array([[0, 0, 0],
[0, 0, 0]])
并用于设置一个值:
In [10]: a[idx,idx,:] = 10
In [11]: a
Out[11]:
array([[[10, 10, 10],
[ 7, 4, 4]],
[[ 8, 2, 7],
[10, 10, 10]]])
In [10]: a[idx,idx,:] = 10
In [11]: a
Out[11]:
array([[[10, 10, 10],
[ 7, 4, 4]],
[[ 8, 2, 7],
[10, 10, 10]]])