如何填充numpy数组的“部分对角轴”

问题描述:

我有一个三维的numpy数组A。我想要如何填充numpy数组的“部分对角轴”

A[i, i, :] = 1.0 

i

如何在numpy中优雅地做到这一点?是否有可能避免所有for循环?

方法#1您可以创建一个对角面具与np.eye,然后使用布尔索引分配 -

mask = np.eye(A.shape[0], dtype=bool) 
A[mask] = 1.0 

方法2使用基于整数索引 -

r = np.arange(A.shape[0]) 
A[r,r] = 1.0 

方法#3重塑为2D然后分配到行中 -

n = A.shape[0] 
A.reshape(-1,A.shape[-1])[np.arange(n)*(n+1)] = 1.0 
+0

它确实有效。但如何理解呢?该文档说“掩码”索引数组返回数据的副本,而不是视图。 https://docs.scipy.org/doc/numpy/user/basics.indexing.html –

+0

@ChongWang我们不是用掩码提取数据,而是分配数据。所以,这里没问题。 – Divakar

+0

任何文档详细说明分配行为? –