首页 > 解决方案 > 以更有效的方式访问 3D 矩阵的所有奇数索引

问题描述

所以我有一个 3D numpy 矩阵,我想首先访问奇数索引,然后一旦我访问了所有奇数索引,我就想访问偶数索引。目前,我有两个三重嵌套的 for 循环,但这真的很慢。我现在拥有的可以在下面看到。第一个 if 语句是因为我不必访问立方体的边缘。我也将对 Matrix[i,j,k] 做其他事情并使其等于一个数字,但我的问题是有效地访问赔率,然后是偶数。

        for i in range(self.size):
            for j in range(self.size):
                for k in range(self.size):
                    if i==0 or i==(self.size-1) or j==0 or j==(self.size-1) or k==0 or k==(self.size-1): 
                        pass
                    elif (i+j+k)% 2==1:
                         Matrix[i,j,k]=2

                    else:
                        pass

        for i in range(self.size):
            for j in range(self.size):
                for k in range(self.size):
                    if i==0 or i==(self.size-1) or j==0 or j==(self.size-1) or k==0 or k==(self.size-1): 
                        pass
                    elif (i+j+k)% 2==0:
                         Matrix[i,j,k]=4
                    else:
                        pass 

标签: pythonperformancefor-loopmatrixindexing

解决方案


您正在使用总和的剩余部分,但没有必要给您奇数或偶数,因为奇数 + 奇数 + 偶数将是偶数。不过,您可以使用 NumPy 不仅支持标量作为索引的事实。如果您指定,您也可以省略使用ifwith a 。您可以使用以下代码:passrange(1, self.size-1)

Matrix[range(1,self.size-1,2),range(1,self.size-1,2),range(1,self.size-1,2)]=2
Matrix[range(2,self.size-1,2),range(2,self.size-1,2),range(2,self.size-1,2)]=2

第三个参数允许您迭代每个第二个数字


推荐阅读