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

时间:2014-02-06 23:59:24

标签: python arrays position tuples

我有两个(x,y)坐标数组。在对它们执行数学运算之后,我问程序哪个答案小于300.

我还想告诉我哪两对(x,y)坐标(一个来自数组a和一个来自数组b)用于计算这个答案。我怎么能这样做?

Nb:数组的内容是随机的,用户可以选择它们的长度(如下所示)。

这是我的代码:

#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

但正如我上面所说,我希望它能告诉我a和b中每个(x,y)对的索引(或其所谓的数组),这样看起来像这样:

a: 15 b: 3 is less than 300

(如果它是a中的第15对坐标,b中的第3对坐标创建的结果小于300)。

我尝试过使用带有itertools.count的zip,但它重复了迭代的次数太多了,所以就这样了。

1 个答案:

答案 0 :(得分: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.