Return index of tuple in array of pairs with python
我有两个(x,y)坐标数组。在对它们进行数学运算后,我问程序答案中哪一个小于300。
我还想告诉我用哪两对(x,y)坐标(一对来自数组A,一对来自数组B)来计算这个答案。我该怎么做?
注意:数组的内容是随机的,其长度由用户选择(如下所示)。
这是我的代码:
1 2 3 4 5 6 | #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对,输出如下:
1 2 | a[(1,5),(300,70),(10,435)] b[(765,123),(456,20)] |
号
每次都有不同的数字,因为它是一个随机数生成器。)
1 2 3 4 5 6 7 8 9 10 11 | #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" |
目前,输出如下:
1 | a: [0 1] b: [0 1] is less than 300 |
。
或
1 | a: [0 1] b: [0 1] is more than 300 |
但正如我上面所说,我希望它告诉我A和B中每个(x,y)对的索引(或它对数组的调用),这样它看起来像这样:
1 | a: 15 b: 3 is less than 300 |
。
(如果A中的第15对坐标和B中的第3对坐标产生的结果小于300)。
我试过将zip与itertools.count结合使用,但最终重复迭代次数太多,所以没问题。
1 2 3 4 5 6 7 8 9 10 11 12 | 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) |
简单地循环结果索引以打印它们。虽然看起来你是在计算距离,但是在检查结果之前应该加上一个