2016-12-04 120 views
1

我是python的新手。這是我的問題。查找兩個高維numpy陣列之間的相互元素

import numpy as np 

def neighbors(indexset, i,j): 
    temp = np.array([[i-1,j],[i+1,j],[i,j-1],[i,j+1]]) 
    for ele in temp: 
     if ele in indexset: 
      print(ele) 

indexset = np.array([[0,1],[1,1],[2,1],[3,1]]) 
neighbors(indexset, 0,0) 

當我運行此我得到的值,我不明白

neighbors(indexset, 0,0) 
[1 0] 
[ 0 -1] 
[0 1] 

我在做什麼錯?爲什麼不只返回[0,1]?

+0

哪些是樣品中二高維numpy的陣列? – Divakar

+0

的目標是找到temp和indexset的共享元素 – kevinkayaks

回答

2

我認爲你會得到結果結果,因爲ele in temp只適用於ele是標量。它使用numpy函數__contains__,相當於(a==b).any()。如果你這樣做與Python列表,而不是numpy的陣列,它的工作原理:

def neighbors(indexset, i,j): 
    temp = [[i-1,j],[i+1,j],[i,j-1],[i,j+1]] 
    for ele in temp: 
     if ele in indexset: 
      print(ele) 

indexset = [[0,1],[1,1],[2,1],[3,1]] 
neighbors(indexset, 0,0) 

將打印[0,1]預期。如果indexset始終是一個numpy的數組,你可以使用tolist

import numpy as np 

def neighbors(indexset, i,j): 
    temp = [[i-1,j],[i+1,j],[i,j-1],[i,j+1]] 
    for ele in temp: 
     if ele in indexset.tolist(): 
      print(ele) 

indexset = np.array([[0,1],[1,1],[2,1],[3,1]]) 
neighbors(indexset, 0,0) 
+0

謝謝!我看到代碼在列表上工作。不過,我認爲indexset必須是一個numpy數組。 與tolist建議的修訂版不起作用。 我得到 ValueError異常:具有多於一個元素的數組的真值是不明確的。使用a.any()或a.all()。 我想我需要比「中」 – kevinkayaks

+0

使用,我得到的輸出作爲唯一上榜的實現同一種不同的方法。你有沒有用我在答案的第二部分所寫的內容?因爲'temp'也需要成爲一個列表,它在我的函數中。也許你在'tolist'方法的版本中將'temp'作爲一個numpy數組? –

+0

是的,我可以通過在'neighbours'函數中將'temp'設置爲一個numpy數組,並且只在'indexset'上使用'tolist'來複制'ValueError'。只要將'temp = np.array([[i-1,j],[i + 1,j],[i,j-1],[i,j + 1]])'改爲'temp = [[ i-1,j],[i + 1,j],[i,j-1],[i,j + 1]]'在'neighbours'版本中使用'tolist'。 –

相關問題