为了账号安全,请及时绑定邮箱和手机立即绑定

对于numpy 2d数组,如何找到所有相邻元素对?

对于numpy 2d数组,如何找到所有相邻元素对?

收到一只叮咚 2022-08-11 20:21:06
请帮帮我。我想问一下numpy matrix(2D array)。我有一个2d数组,其中所有元素都具有或作为值。的形状最多是。x10x(1000, 1000)让我定义一下:如果两个不同的元素的索引(分别分别为行和列)最多不同,则称为相邻对;两者都有自己的价值观。x11我想知道如何查找 上的所有相邻对。A我是否需要使用 for 循环?非常感谢你提前。
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

我认为这些要求可以在numpy中没有显式循环的情况下得到满足。


import numpy as np 


np.random.seed(1234)  # Make random array reproduceable


arr = 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 1


vrows, 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 1


print(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数组。


查看完整回答
反对 回复 2022-08-11
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信