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

2024-09-29 01:19:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个类似的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语句的数量和边界?你知道吗


Tags: andto方法numpyifnp代表数组
2条回答

你没有列出你的全部代码,所以,不清楚你到底想做什么。在任何情况下,你都可以用一组元组来描述每个正方形

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

在这种情况下,数组非常有用。你知道吗

您可以创建一个count数组,并将其索引到该数组中(因此count0变成count[0]count1count[1],依此类推),而不是创建单个的countn变量。你知道吗

现在的诀窍就是将x和y坐标映射到一个特定的count数组索引,这可以通过一些数学来实现。i、 例如,如果正方形是3x3并且排列成一个大矩形,那么x // 3 + (y // 3) * num_squares_per_row会给出索引。你知道吗

如果您要计算的区域不一致,因此无法得出简单的数学公式,则始终可以制作一个字典,将要计算的对象映射到count数组中它们的索引,并使用该字典计算给定特定输入时要递增的索引。你知道吗

相关问题 更多 >