Как решить, к какому интервалу принадлежит число - PullRequest
0 голосов
/ 28 мая 2020

Допустим, у меня есть машина с передним полем обзора (180 градусов), и я хочу разрезать эти 180 градусов на несколько интервалов, например, на 30 градусов. и у меня есть набор чисел, и я хочу решить, к какому интервалу принадлежит номер.

Я знаю, как его жестко запрограммировать, но как я могу автоматизировать его, чтобы создать алгоритм, который делает это на основе на количество интервалов.

Если, например, 180 градусов были разделены на 45 градусов, то эти интервалы были бы (0-45) - индекс 0, (45-90) - индекс 1, (90-135 ) - индекс 2, (135-180) - индекс 3 Это означает, что у меня будет вектор размера четыре (один элемент для каждого интервала)

И если у меня есть числа, например, 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 Я знаю, что наверняка будет какая-нибудь "дурацкая" опечатка, но я не могу ее найти, еще раз спасибо за вашу помощь

1 Ответ

1 голос
/ 28 мая 2020

Для равных секторов просто используйте целочисленное деление, если угол является целым:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...