Python 如何使用try-except对numpy数组中的相邻单元进行计数?
我有一个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个相邻
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]])