Python 如何将三维阵列最后两个轴上的下三角形设置为零?

Python 如何将三维阵列最后两个轴上的下三角形设置为零?,python,arrays,python-3.x,numpy,vectorization,Python,Arrays,Python 3.x,Numpy,Vectorization,我有一个三维数组,它的维数为(N,M,M)。我想将每个(M,M)数组的对角线和下三角形设置为零。如何不在第一维度上循环?有矢量化的操作吗 在两个维度(M,M)中,我会这样做 X = np.triu(X, k=1) 如何将其推广到没有循环的三维空间 例如,输入: [[[ 1 2 3] [ 4 5 6] [ 7 8 9]] [[10 11 12] [13 14 15] [16 17 18]] [[19 20 21] [22 23 24] [25 26 2

我有一个三维数组,它的维数为(N,M,M)。我想将每个(M,M)数组的对角线和下三角形设置为零。如何不在第一维度上循环?有矢量化的操作吗

在两个维度(M,M)中,我会这样做

X = np.triu(X, k=1)
如何将其推广到没有循环的三维空间

例如,输入:

[[[ 1  2  3]
  [ 4  5  6]
  [ 7  8  9]]

 [[10 11 12]
  [13 14 15]
  [16 17 18]]

 [[19 20 21]
  [22 23 24]
  [25 26 27]]

 [[28 29 30]
  [31 32 33]
  [34 35 36]]]
预期产量

[[[ 0  2  3]
  [ 0  0  6]
  [ 0  0  0]]

 [[0 11 12]
  [0 0 15]
  [0 0 0]]

 [[0 20 21]
  [0 0 24]
  [0 0 0]]

 [[0 29 30]
  [0 0 33]
  [0 0 0]]]

即使未在中显示,
np.triu
支持广播:

X=np.ones((2,10,10))
X=np.triu(X, k=1)

即使未显示在,
np中,也会给出您想要的结果。triu
支持广播:

X=np.ones((2,10,10))
X=np.triu(X, k=1)

将给出您想要的结果

您能给我们一个3D预期输出的示例吗?
X=np.ones((2,10,10))
X=np.triu(X,k=1)fine@Brenlla这看起来确实管用,但是不幸的是,
triu
tril
的文档明确表示它希望输入是二维的,这意味着我们可能需要查看源代码以确保它是正确的。是的,应该更好地记录下来。基于它,它看起来确实应该工作。调用
np.tri
仅基于最后两个形状维度,然后使用
where
将沿原始形状的第一个轴进行广播。您能给我们一个3D预期输出的示例吗?
X=np.one((2,10,10))
X=np.triu(X,k=1)
有效fine@Brenlla这似乎是可行的,但不幸的是,
triu
tril
的文档明确表示它希望输入是二维的,这意味着我们可能需要查看源代码以确保它是正确的。是的,应该更好地记录下来。基于它,它看起来确实应该工作。调用
np.tri
仅基于最后两个形状维度,然后使用
where
将通过原始形状沿第一个轴进行广播。Brella,非常感谢!我检查过了,它能用。文档中说triu的输入应该是2维的,我真的被它弄糊涂了。给我一个教训:永远不要完全信任医生,最好测试一下自己布伦拉,非常感谢!我检查过了,它能用。文档中说triu的输入应该是2维的,我真的被它弄糊涂了。给我一个教训:永远不要完全信任文档,最好测试一下自己