2014-02-06 38 views
0

我有兩個(x,y)座標數組。在對它們進行數學運算後,我問程序哪個答案小於300.返回Python對中的數組對的索引

我也想告訴我哪兩對(x,y)座標(一個來自數組a和1從數組b)被用來計算這個答案。我怎樣才能做到這一點?

編號:數組的內容是隨機的,它們的長度由用戶選擇(如下所示)。

這裏是我的代碼:

#Create arrays 
xy_1 = [(random.randint(0,1000), random.randint(0,1000)) for h in range((int(raw_input(「Type your first array’s range: 「)))] 
a = array([xy_1]) 

xy_2 = #same as above 
b = array([xy_2]) 

(如果用戶選擇了xy_1有3個對和xy_2有2對,輸出應該是這樣的:

a[(1,5),(300,70),(10,435)] 
b[(765,123),(456,20)] 

每次使用不同的數字,因爲它是隨機數發生器)。

#Perform mathematical operation 
for element in a: 
    for u in element: 
     for element in b: 
      for h in element: 
       ans = (((u[0] - h[0])**2) + ((u[1] - h[1])**2)) 

       if ans <= 300: 
#Problem here  print "a: " + str(np.nonzero(u)[0]) + "b: " + str(np.nonzero(h)[0]) + "is less than 300" 
       else: 
#and here   print "a: " + str(np.nonzero(u)[0]) + "b: " + str(np.nonzero(h)[0]) + "is more than 300" 

目前,輸出看起來是這樣的:

a: [0 1] b: [0 1] is less than 300 

a: [0 1] b: [0 1] is more than 300 

,但正如我上面所說的,我想它告訴我的索引(或任何它被稱爲數組)每個(的x,y)對在a和b,使得其看起來像這樣:

a: 15 b: 3 is less than 300 

(如果它是在第15對座標和b中的第三對創建,這是一個結果小於300 )。

我已經嘗試使用zip與itertools.count,但它結束重複迭代太多次,所以這是了。

+0

可能的重複[在給定包含Python的列表中的項目索引] (http://stackoverflow.com/questions/176918/finding-the-index-of-an-item-given-a-list-containing-it-in-python) – sashkello

+0

感謝您的建議,但我試過索引,枚舉和itertools,正如帖子的答案所表明的那樣,並且他們都沒有工作到目前爲止。 – YerABlizzardHarry

+0

然後看看這個:http://stackoverflow.com/questions/946860/using-pythons-list-index-method-on-a-list-of-tuples-or-objects – sashkello

回答

0
import numpy as np 

h = int(raw_input("Type your first array's range: ")) 
xy_1 = np.random.randint(0, 1000, (h, 2)) 
a = xy_1 

h = int(raw_input("Type your first array's range: ")) 
xy_2 = np.random.randint(0, 1000, (h, 2)) 
b = xy_2 
ans = (a[:, 0] - b[:, 0, None]) ** 2 + (a[:, 1] - b[:, 1, None]) ** 2 

a_indexes, b_indexes = np.nonzero(ans < 300) 

簡單地遍歷結果索引來打印它們。雖然看起來你正在計算距離,並且應該在檢查結果之前加上np.sqrt,然後檢查它們是否在300以下。

+0

這工作完美,是如此之多更優雅。非常感謝! :) – YerABlizzardHarry