Получить маску len массива True / False - PullRequest
0 голосов
/ 20 сентября 2019

Этот код работает:

all_historic_data = pd.DataFrame()

percent_of_data = 0.8
#create train and test sets
#this methodology will randomly select percent_of_data of our data

msk = np.random.rand(len(all_historic_data)) < percent_of_data
train = all_historic_data[msk]
test = all_historic_data[~msk]

Однако, если мне не нужно случайное число, и я пытаюсь это сделать:

msk = range(len(all_historic_data)) < percent_of_data

Я получаю ошибку:

TypeError: '<' not supported between instances of 'range' and 'float'

Как получить фиксированное значение array, где количество записей от True до False равно точно percent_of_data

1 Ответ

1 голос
/ 20 сентября 2019

Я буду считать all_historic_data вектором.

Если вы просто хотите, чтобы каждый раз получался один и тот же результат, одно из возможных решений - установить начальное число, поэтому «случайно» сгенерированные числа будут всегда одинаковыми.Это можно сделать следующим образом:

np.random.seed(10) # write any number you like
a = np.random.rand(100)
np.random.seed(10) # write any number you like
b = np.random.rand(100)
print(a == b)

Поскольку вы установили начальное число, его «случайный» компонент исчез - вы всегда будете получать одни и те же цифры.

Действительно, выводis:

[ True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True]

NB: len(all_historic_data) является целым числом, поэтому range(len(all_historic_data)) является объектом диапазона, содержащим значения 0, 1, ..., len (all_historic_data) - 1. Например, есливы запускаете

for i in range(10):
    print(i)

Тогда на выходе будет

0
1
2
3
4
5
6
7
8
9

Следовательно, вы можете заметить, что все эти числа, кроме первого, будут меньше 0,8.Если вы используете это для создания набора поездов, то в вашем наборе поездов будет только одно наблюдение.

Если вы все еще хотите сравнить числа в объекте диапазона с поплавком, используя np.arange, как упоминалось@Dan, может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...