【问题标题】:How to decide to which interval a number belongs如何确定一个数字属于哪个区间
【发布时间】:2020-05-28 22:07:38
【问题描述】:

假设我有一辆正面视野(180 度)的汽车,我想将这 180 度分成几个间隔,例如 30 度。我有一组数字,我想决定该数字属于哪个区间。

我知道如何对其进行硬编码,但我如何将其自动化以创建一个基于间隔数执行此操作的算法。

例如,如果 180 度被 45 度分割,那么这些间隔将是 (0 - 45) - 索引 0, (45 - 90) - 索引 1, (90 - 135) - 索引 2, (135 - 180) - 索引 3 这意味着我将有一个大小为 4 的向量(每个间隔一个元素)

如果我有数字,例如 30 和 150,向量将如下所示:[1, 0, 0, 1]

我怎样才能做到这一点?

这是我尝试做的:

NUMBER_OF_SECTORS = 6
sector_thresholds = []

for i in range(NUMBER_OF_SECTORS+1):
    sector_thresholds.append(180/NUMBER_OF_SECTORS * i)
print(sector_thresholds)

list_of_states = []
state_vector = [0] * (NUMBER_OF_SECTORS + 1)
for i in range(1000):
    random_number = 360*random.random() # If the number is larger than 180 then it should be ignored
    for j in range(NUMBER_OF_SECTORS):
        if j == 0:
            pass
        if sector_thresholds[j-1] <= random_number <= sector_thresholds[j]:
            state_vector[j] = random.choice([1,2]) #This shows an assignment error
    print(state_vector)
    state_vector = []

我该如何解决这个问题?

非常感谢您的帮助

编辑:我尝试根据以下答案改进我的代码,如下所示:

for i in range(NUMBER_OF_SECTORS+1):
    sector_thresholds.append(180/NUMBER_OF_SECTORS * i)
print(sector_thresholds)

list_of_states = []
state_vector = [0] * (NUMBER_OF_SECTORS + 1)
for i in range(1000):
    random_number = 360*random.random()
    while i % NUMBER_OF_SECTORS: # make sure that the state vector gets cleared after the same amount of iteration as its length
        sector = int(np.floor(random_number /(180/NUMBER_OF_SECTORS)))
        print(f"sector is {sector}")
        if sector <= NUMBER_OF_SECTORS:
            state_vector[sector] = 1
    print(state_vector)
    state_vector = []

但我在state_vector[sector] = 1 list assignment index out of range 行中遇到错误我知道肯定会有一些“愚蠢”的错字但我找不到它,再次感谢您的帮助

【问题讨论】:

    标签: python algorithm


    【解决方案1】:

    对于相等的扇区,当角度为整数时,只需使用整数除法:

    sector = angle // sectorsize
    

    如果角度是浮动的,则为地板

    sector = int(angle / sectorsize)
    

    例子:

    import random
    NUMBER_OF_SECTORS = 6
    sector_size = 180 / NUMBER_OF_SECTORS
    
    state_vector = [0] * (NUMBER_OF_SECTORS + 1)
    for i in range(10):
        random_number = 360*random.random()
        sector = int(random_number / sector_size)
        print(f"sector is {sector}")
        if sector <= NUMBER_OF_SECTORS:
            state_vector[sector] = 1
    print(state_vector)
    
    >sector is 5
     ...
    >[0, 0, 0, 1, 1, 1, 1]
    

    【讨论】:

    • 谢谢,这几乎解决了我的问题,详情请参阅编辑。当我的问题完全解决时,我会接受你的问题,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2022-06-17
    • 2010-10-13
    • 2010-09-27
    • 2019-05-18
    • 2010-10-14
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多