Python:自动生成数量可变的if语句

时间:2018-08-30 15:02:58

标签: python numpy for-loop if-statement inequalities

我有两个类似于这些的numpy数组,它们代表坐标:

import numpy as np
x=np.array([1,3,2,4,6,5,4,1])
y=np.array([4,4,3,2,2,1,3,5])

我也有n个正方形:

s1 -> x=0 to 3, y=0 to 3
s2 -> x=3 to 6, y=3 to 6
s3 -> ...
s4 -> ...

,我想计算每个方格内的点数。这取决于评估n不等式。

我的方法很冗长,而且效率低下:

count1=0
count2=0
count3=0
count4=0
for j in range(0, len(x)):
    #Square 1
    if x[j]<=3 and y[j]<=3:
        count1+=1
    #Square 2
    if x[j]<=3 and y[j]>3 and y[j]<=6:
        count2+=1
    #Square 3
    if x[j]>3 and x[j]<=6 and y[j]<=3:
        count3+=1
    #Square 4
    if x[j]>3 and x[j]<=6 and y[j]>3 and y[j]<=6:
        count4+=1

给出我的两个数组,返回:

In[1]: count1, count2, count3, count4
Out[1]: (1, 3, 4, 0)

我真正的问题是由可变数目的正方形组成(可能是6,可能是36,依此类推)。

有没有一种方法可以自动生成count变量以及if语句的数量和边界?

2 个答案:

答案 0 :(得分:1)

您没有列出完整的代码,因此,不清楚您到底想做什么。无论如何,您都可以用一个元组来描述每个正方形

square_n = ((x1, x2), (y1, y2))

并将它们放在字典中,其中的键是该元组,值是计数。然后,类似

for square in squares_dict:
    (x1, x2), (y1, y2) = square
    if x1<a<x2 and y1<b<y2: # whatever criterion you have
        squares_dict[square] += 1

答案 1 :(得分:0)

在这种情况下,数组非常有用。

您可以创建一个count数组,然后索引该数组(因此countn变成count0count[0]到{{1} },等等。

现在的诀窍是仅将x和y坐标映射到特定的count数组索引,您可以通过一些数学运算来完成。也就是说,如果正方形是3x3并以大矩形排列,那么count1会为您提供索引。

如果您要计算的区域不统一,因此无法提出简单的数学方程式,则始终可以制作一个字典,将要计算的内容映射到其索引在count[1]数组中,并使用该值找出给定特定输入要增加的索引。