Python 如何使用try-except对numpy数组中的相邻单元进行计数?

Python 如何使用try-except对numpy数组中的相邻单元进行计数?,python,arrays,python-3.x,numpy,neighbours,Python,Arrays,Python 3.x,Numpy,Neighbours,我有一个numpy阵列: x = np.random.rand(4, 5) 我想创建一个数组,显示原始数组中每个值有多少个相邻值。我的意思是: example=np.array([[0,1,0,0,0], [1,2,1,0,0], [0,1,0,0,0], [0,0,0,0,0]]) plt.imshow(example) 位置[1][1]处的值有4个相邻单元格,黄色正方形有4个相邻

我有一个numpy阵列:

x = np.random.rand(4, 5)
我想创建一个数组,显示原始数组中每个值有多少个相邻值。我的意思是:

example=np.array([[0,1,0,0,0],
                  [1,2,1,0,0],
                  [0,1,0,0,0],
                  [0,0,0,0,0]])

plt.imshow(example)
位置[1][1]处的值有4个相邻单元格,黄色正方形有4个相邻的绿色单元格

有效的解决方案:

x = np.random.rand(4, 5)

mask = 4*np.ones(x.shape, dtype=int)

mask[0][:]=3
mask[-1][:]=3

for each in mask: each[0]=3
for each in mask: each[-1]=3

mask[0][0]=2
mask[0][-1]=2
mask[-1][0]=2
mask[-1][-1]=2
遮罩变为:

现在,我尝试使用try创建相同的数组,除了:

给出生成的数组:

这不等于面具,正如我所料


除了上述目的之外,我在这里做错了什么,或者应该如何使用try?

这里的问题是numpy允许负索引。a[-1]代表a中的最后一个值,这就是为什么数组中的第一个数字没有减少


我认为您描述的第一种方法比try-except方法更干净、更快,您应该使用它。

这里的问题是numpy允许负索引。a[-1]代表a中的最后一个值,这就是为什么数组中的第一个数字没有减少

我认为您描述的第一种方法比try-Exception方法更干净、更快,您应该使用它。

意识到索引-1和索引-1标记仍然有效,当索引和索引等于0时,它们的值仅为-1,使其成为有效的数组索引,即使它们引用的值与index和index引用的值不相邻。我的解决方案如下:

x = np.random.rand(4, 5)

numofneighbours=[]

for index, each in enumerate(x):    
    row=[]
    for INDEX, EACH in enumerate(each):

        c=4
        try:x[index+1][INDEX]
        except:c-=1

        try:x[index][INDEX+1]
        except:c-=1

        try:x[index-1][INDEX]
        except:c-=1
        if (index-1)<0: c-=1

        try:x[index][INDEX-1]
        except:c-=1
        if (INDEX-1)<0: c-=1

        row.append(c)

    numofneighbours.append(row)
numofneighbours=np.asarray(numofneighbours)
当index和index等于0时,index-1和index-1索引仍然有效,它们只有值-1,使其成为有效的数组索引,即使它们引用的值与index和index引用的值不相邻。我的解决方案如下:

x = np.random.rand(4, 5)

numofneighbours=[]

for index, each in enumerate(x):    
    row=[]
    for INDEX, EACH in enumerate(each):

        c=4
        try:x[index+1][INDEX]
        except:c-=1

        try:x[index][INDEX+1]
        except:c-=1

        try:x[index-1][INDEX]
        except:c-=1
        if (index-1)<0: c-=1

        try:x[index][INDEX-1]
        except:c-=1
        if (INDEX-1)<0: c-=1

        row.append(c)

    numofneighbours.append(row)
numofneighbours=np.asarray(numofneighbours)

对邻居来说,你只是数一数有多少个尼伯林细胞,或者你把它们的值加起来?只是数一数有多少个-不是求和对邻居来说,你只是数一数有多少个尼伯林细胞,或者你把它们的值加起来?只是数一数有多少个-不是求和谢谢,我相信你的答案是正确的。我打算尝试一下,除了其他一些问题,这应该是一个简化的问题,对于一个更复杂的问题。谢谢你,我相信你的答案是正确的。我计划使用try,除了一些其他的问题,这应该是一个更复杂问题的简化问题。
array([[4, 4, 4, 4, 3],
       [4, 4, 4, 4, 3],
       [4, 4, 4, 4, 3],
       [3, 3, 3, 3, 2]])
x = np.random.rand(4, 5)

numofneighbours=[]

for index, each in enumerate(x):    
    row=[]
    for INDEX, EACH in enumerate(each):

        c=4
        try:x[index+1][INDEX]
        except:c-=1

        try:x[index][INDEX+1]
        except:c-=1

        try:x[index-1][INDEX]
        except:c-=1
        if (index-1)<0: c-=1

        try:x[index][INDEX-1]
        except:c-=1
        if (INDEX-1)<0: c-=1

        row.append(c)

    numofneighbours.append(row)
numofneighbours=np.asarray(numofneighbours)
array([[2, 3, 3, 3, 2],
       [3, 4, 4, 4, 3],
       [3, 4, 4, 4, 3],
       [2, 3, 3, 3, 2]])