互换的青春
我认为这些要求可以在numpy中没有显式循环的情况下得到满足。import numpy as np np.random.seed(1234) # Make random array reproduceablearr = np.random.randint( 0, 2, size = (10,10))leftshifted = arr[ :, 1:] # Shift arr 1 col left, shape = (10, 9)downshifted = arr[ 1: ] # Shift arr 1 row down, shape = ( 9, 10)hrows, hcols = np.where( arr[ :, :-1 ] & leftshifted ) # arr[ :,:-1 ] => ignore last column for the comparison# returns rows and columns where arr and leftshifted = 1# i.e. where two adjacent columns in a row are 1vrows, vcols = np.where( arr[ :-1 ] & downshifted )# arr[ :-1 ] => ignore last row for the comparison# returns rows and columns where arr and downshifted = 1# i.e. where two adjacent rows in a column are 1print(arr, '\n')# [[1 1 0 1 0 0 0 1 1 1]# [1 1 0 0 1 0 0 0 0 0]# [0 0 0 0 1 0 1 1 0 0]# [1 0 0 1 0 1 0 0 0 1]# [1 1 0 1 1 0 1 0 1 0]# [1 1 1 1 0 1 0 1 1 0]# [0 1 0 0 1 1 1 0 0 0]# [1 1 1 1 1 1 1 0 1 0]# [1 0 1 0 0 0 0 0 0 0]# [0 1 1 1 0 1 0 0 1 1]]print('Row indices :', hrows)print('Col start ix :', hcols)print('Col end ix :', hcols+1)# Row indices : [0 0 0 1 2 4 4 5 5 5 5 6 6 7 7 7 7 7 7 9 9 9]# Col start ix : [0 7 8 0 6 0 3 0 1 2 7 4 5 0 1 2 3 4 5 1 2 8]# Col end ix : [1 8 9 1 7 1 4 1 2 3 8 5 6 1 2 3 4 5 6 2 3 9]print('\nStart Row:', vrows, '\nEnd Row :',vrows+1, '\nColumn :', vcols)# Start Row: [0 0 1 3 3 4 4 4 4 5 5 6 6 6 6 7 7 8] # End Row : [1 1 2 4 4 5 5 5 5 6 6 7 7 7 7 8 8 9] # Column : [0 1 4 0 3 0 1 3 8 1 5 1 4 5 6 0 2 2]一个元素可以有多个对吗?在上面,它可以是。两个对角线接触的元素算作一对吗?如果是这样,还需要一个shifted_left_and_down数组。