循环3D矩阵并打印值

时间:2020-03-21 13:36:28

标签: python multidimensional-array

我正在尝试遍历3d矩阵并访问这些值并获取一些计数值以查找概率。我在其中取得了成功,但我首先要假设b = 0,这是我不希望的,因为它给我减小的概率带来了很小的误差。矩阵是

 array([[[  1,   1,   1,   1, -99, -99],
    [  1,   1,   1,   1, -99, -99],
    [  1,   1,   1,   1, -99, -99],
    [  1,   1,   1,   1,   1, -99]],

   [[-99, -99, -99, -99, -99, -99],
    [-99, -99, -99, -99, -99, -99],
    [-99, -99, -99, -99, -99,   1],
    [-99, -99, -99, -99, -99,   1]],

   [[  1,   1,   1,   1,   1,   1],
    [  1,   1,   1,   1,   1,   1],
    [  1,   1,   1,   1,   1,   1],
    [  1,   1,   1,   1,   1,   1]],

   [[  1,   1,   1,   1,   1,   1],
    [  1,   1,   1,   1,   1,   1],
    [  1,   1,   1,   1,   1,   1],
    [  1,   1,   1,   1,   1,   1]]], dtype=int16)

我运行的代码是:

 for i in range(4):
...     for j in range(6):
...         b=NR=NN=RR=RN=0
...         for k in range(4):
...             a = array[k][i][j]
...             if(a==0 and b==0):
...                 NN+=1
...                 b=a
...             elif(a==0 and b==1):
...                 RN+=1
...                 b=a
...             elif(a==1 and b==0):
...                 NR+=1
...                 b=a
...             elif(a==1 and b==1):
...                 RR+=1
...                 b=a
...             else:
...                 exit
...         print(NN,NR,RN,RR)

为此,我获得了额外的24个“ NR”值,这些值我不希望通过不初始化b而出现。当我没有初始化b时,我得到以下输出:

(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 2)
(0, 0, 0, 2)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 2)
(0, 0, 0, 2)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 2)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)
(0, 0, 0, 3)

这是不正确的,因为实际输出是

(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 1)
(0, 1, 0, 1)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 1)
(0, 1, 0, 1)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 1)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)
(0, 1, 0, 2)

第二列中的值不为“ 1”。关于如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

要跳过循环迭代,请使用continue不退出(这不是有效命令)。由于在第一次迭代中没有有效的b值,因此将其初始化为-99。如果a = -99,则跳过求和和b = a赋值,以便b保留最后一个有效的a值。

for i in range(4):
     for j in range(6):
         NR=NN=RR=RN=0
         b = -99
         for k in range(4):
            a = array[k][i][j]
            if a == -99 : continue
            if(a == 0 and b == 0): NN+=1
            elif(a == 0 and b == 1): RN+=1
            elif(a == 1 and b == 0): NR+=1
            elif(a == 1 and b == 1): RR+=1  
            b=a
         print(NN,NR,RN,RR)