我有两个(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,但它重复了迭代的次数太多了,所以就这样了。
答案 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.