使用python返回对数组中元组的索引

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)

简单地循环结果索引以打印它们。虽然看起来你是在计算距离,但是在检查结果之前应该加上一个np.sqrt,结果如下300。