我尝试使用Python 3.7确定二维数组中的相邻元素。
该数组如下所示:
array([[ 1., 2., nan, nan, 5.],
[nan, 2., nan, 5., nan],
[nan, 2., 4., nan, 6.],
[nan, nan, nan, 5., 5.],
[nan, nan, nan, nan, nan],
[ 1., 2., 4., nan, nan],
[ 1., 2., nan, nan, 4.],
[nan, 4., nan, nan, 5.]])
首先需要确定最大值位置为(2,4), 然后想要获取其邻居的非
nan
值。以下是代码:test_arr = np.array([[1,2,np.nan,np.nan,5],
[np.nan,2,np.nan,5,np.nan],
[np.nan,2,4,np.nan,6],
[np.nan,np.nan,np.nan,5,5],
[np.nan,np.nan,np.nan,np.nan,np.nan],
[1,2,4,np.nan,np.nan],
[1,2,np.nan,np.nan,5],
[np.nan,4,np.nan,np.nan,6]])
row = test_arr.shape[0]
col = test_arr.shape[1]
temp_amatrix = np.matrix(test_arr)
p = np.argwhere(test_arr == np.nanmax(temp_amatrix)).flatten()[0]
q = np.argwhere(test_arr == np.nanmax(temp_amatrix)).flatten()[1]
def neighbours(test_arr_in,countnotnan_in):
for r in range(len(np.where(countnotnan_in==1)[0])):
x = np.where(countnotnan_in == 1)[0][r]
y = np.where(countnotnan_in == 1)[1][r]
indexlist = [[x-1,y-1],[x-1,y],[x-1,y+1],[x,y-1],[x,y+1],[x+1,y-1],[x+1,y],[x+1,y+1]]
for c in indexlist:
if 0 <= c[0] < row and 0 <= c[1] < col:
if np.isnan(test_arr_in[c[0],c[1]]) == False:
countnotnan_in[c[0],c[1]] = 1
return countnotnan_in
countnotnan = np.zeros_like(test_arr)
countnotnan[p][q] = 1
notnan_arr = neighbours(test_arr,countnotnan)
结果是:
notnan_arr = array([[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 1, 0],
[ 0, 0, 0, 0, 1],
[ 0, 0, 0, 1, 1],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]])
好的,没问题。实际上,我想使用新的“1”值来确定它们的邻居,也就是确定(1,3),(3,3)和(3,4)位置的邻居。重复此过程直到从(2,4)位置开始的所有具有值的位置被确定。结果将是这样的:
notnan_arr = array([[ 1, 1, 0, 0, 1],
[ 0, 1, 0, 1, 0],
[ 0, 1, 1, 0, 1],
[ 0, 0, 0, 1, 1],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]])
接下来,我想确定其余未标识值的最大值,以重复此过程,直到此二维数组中所有邻居位置的值都被确定。最终结果应如下所示:
notnan_arr = array([[ 1, 1, 0, 0, 1],
[ 0, 1, 0, 1, 0],
[ 0, 1, 1, 0, 1],
[ 0, 0, 0, 1, 1],
[ 0, 0, 0, 0, 0],
[ 1, 1, 1, 0, 0],
[ 1, 1, 0, 0, 1],
[ 0, 1, 0, 0, 1]])
我的母语不是英语,如果有任何关于描述的问题,请告诉我,我会尽力说明。如果有人能帮助我,我将非常感激。