访问 Numpy 3 维数组中的短对角线元素
Access to short diagonal elements in Numpy 3 dimensional array
我有一个 3 维 numpy 数组,我想访问它的短对角线元素。假设 i,j,k 是三个维度。是否可以访问 i==j
ori==k
orj==k
的元素,以便我可以设置他们到一个特定的价值。
我试图通过创建一个索引掩码变量来解决这个问题。这个索引的掩码变量被馈送到最终数组,其中 {i=j or i=k or j=k}
的值被设置为特定值。不幸的是,此代码返回 {i=j=k}
的集合
import numpy as np
N = 3
maskXY = np.eye(N).reshape(N,N,1)
maskYZ = np.eye(N).reshape(1,N,N)
maskXZ = np.eye(N).reshape(N,1,N)
maskIndices = maskXY * maskYZ*maskXZ
#set the values of final array using above mask
finalArray[maskIndices] = #specific values
方法 #1
我们可以使用覆盖输入数组维度的范围数组使用 np.ix_
创建开放网格,然后在与问题中描述的语法非常接近的那些中执行 OR-ing,像这样 -
i,j,k = np.ix_(*[np.arange(r) for r in finalArray.shape])
mask = (i==j) | (i==k) | (j==k)
finalArray[mask] = # desired values
方法 #2
看来,我们也可以按照问题中发布的代码使用掩码的布尔版本,然后执行 OR-ing 以获得 mask
等价物,就像这样 -
mask = (maskXY==1) | (maskYZ==1) | (maskXZ==1)
但是,这涉及到 2D(压缩时)的蒙版,因此不会像以前处理 1D 数组的方法那样memory-efficient。
我有一个 3 维 numpy 数组,我想访问它的短对角线元素。假设 i,j,k 是三个维度。是否可以访问 i==j
ori==k
orj==k
的元素,以便我可以设置他们到一个特定的价值。
我试图通过创建一个索引掩码变量来解决这个问题。这个索引的掩码变量被馈送到最终数组,其中 {i=j or i=k or j=k}
的值被设置为特定值。不幸的是,此代码返回 {i=j=k}
import numpy as np
N = 3
maskXY = np.eye(N).reshape(N,N,1)
maskYZ = np.eye(N).reshape(1,N,N)
maskXZ = np.eye(N).reshape(N,1,N)
maskIndices = maskXY * maskYZ*maskXZ
#set the values of final array using above mask
finalArray[maskIndices] = #specific values
方法 #1
我们可以使用覆盖输入数组维度的范围数组使用 np.ix_
创建开放网格,然后在与问题中描述的语法非常接近的那些中执行 OR-ing,像这样 -
i,j,k = np.ix_(*[np.arange(r) for r in finalArray.shape])
mask = (i==j) | (i==k) | (j==k)
finalArray[mask] = # desired values
方法 #2
看来,我们也可以按照问题中发布的代码使用掩码的布尔版本,然后执行 OR-ing 以获得 mask
等价物,就像这样 -
mask = (maskXY==1) | (maskYZ==1) | (maskXZ==1)
但是,这涉及到 2D(压缩时)的蒙版,因此不会像以前处理 1D 数组的方法那样memory-efficient。