2017-04-22 22 views
0

我有一個名爲座標coord2兩個嵌套的元組我想看看在第一個元組匹配一組座標的另一箇中的其他元組不管指數。比較numpy的兩個2-d元組在Python

例如,

coord[0][1] = 127, 
coord[0][2] = 128, 
coord[0] = 127,128,129.... 
coord[1][0] = 302, 
coord[1] = 302,303,304 .... 

現在我可以看到,如果每個索引的其他元組的指數完全匹配,而不是無論是在其他存在一組。這裏是我的代碼:

for i in range(60): 
if (coord[0][i]) == (coord2[0][i]) and (coord[1][i]) == (coord2[1][i]): 
    print(coord[0][i]) 
    print(coord[1][i]) 
    count += 1 
    total += 1 
else: 
    total += 1 

我應該怎麼做呢?我非常新的使用Python中numpy的陣列

我已經寫了,像這樣的一些新的代碼,

for i in range(60): 
    if coord2[0][i] and coord2[1][i] in coord: 
     count += 1 
     total += 1 
    else: 
     total += 1 

在我看來這應該告訴我,如果在第二元組的任何一組座標是在第一一。但我遇到了一個錯誤,說:ValueError:具有多個元素的數組的真值是不明確的。使用a.any()或a.all()

+0

讓我們確保術語是正確的。 '2-D元組'不清楚。像列表一樣的元組可以包含數字或其他列表/元組。我更喜歡'嵌套列表/元組'而不是2d。 'numpy'數組雖然可能是2d。而由嵌套元組構成的數組最終可能是2d。無論如何,此刻你正在將'coord'索引爲嵌套元組(或列表)。那對你有用嗎?什麼,如果有的話,是錯的? – hpaulj

+0

所以我只想知道第二個元組coord2中的任何座標是否在第一個元組座標中。我寫了一些我認爲應該完成的新代碼,但是我遇到了一個錯誤 – goldfarb33

回答

0

如果你只是想知道一個矩陣的任何座標是否存在於另一個矩陣中,那麼這是一種方法。

import itertools 
import numpy 

首先,讓我們所有可能的指數組合的矩陣

idx = tuple(e for e in itertools.product(range(len(coord)), repeat=2)) 

((0, 0), 
(0, 1), 
(0, 2), 
(0, 3), 
(1, 0), 
(1, 1), 
(1, 2), 
(1, 3), 
(2, 0), 
(2, 1), 
(2, 2), 
(2, 3), 
(3, 0), 
(3, 1), 
(3, 2), 
(3, 3)) 

然後讓我們比較兩個索引矩陣,並看看是否有任何點在其他

coord = np.arange(16).reshape(4,4) 

coord1 = np.random.randint(1, size=(4,4)) 

np.equal([coord[_idx] for _idx in idx],[coord1[_idx] for _idx in idx]) 

array([ True, False, False, False, False, False, False, False, False, 
     False, False, False, False, False, False, False], dtype=bool) 

編輯存在:如果你只是想要發生的次數那麼它就變成了這個

np.sum(np.equal([coord[_idx] for _idx in idx],[coord1[_idx] for _idx in idx])) 

>>1 
0

實際上計算出來。

for i in range(200): 
    if (coord2[0][i]) in coord[0] and coord2[1][i] in coord[1]: 
     count += 1 
     total += 1 
    else: 
     total += 1