Цикл не выполняется должным образом - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь создать функцию, которая подсчитывает длину элементов в списке и затем запускает цикл if / elif для них:

k_nearest_samples_class = training_data[sorted_indices[:k]][:, -1]
# print(k_nearest_samples_class)
# counting number of occurrences of either 0's or 1's with below 2 lines
class_0_count = len(k_nearest_samples_class[k_nearest_samples_class == 0])
class_1_count = len(k_nearest_samples_class[k_nearest_samples_class == 1])
class_2_count = len(k_nearest_samples_class[k_nearest_samples_class == 2])

# Combining > & = sign so even in tie-up cases the instance will be classified to malignant - assumed it
# would be okay in order to reduce false positives
if class_0_count >= class_1_count and class_2_count:
    print("0", class_0_count)
    return 0
elif class_1_count >= class_0_count and class_2_count:
    print("1", class_1_count)
    return 1
else:
    print("2", class_2_count)
    return 2

Подача ввода один за другим, например:

[0.0]
[1.0]
[2.0]

В настоящее время цикл my if работает нелогично.

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Эта строка:

if class_0_count >= class_1_count and class_2_count:

эквивалентна:

if class_0_count >= class_1_count and class_2_count > 0:

, вам нужно изменить ее на:

if class_0_count >= class_1_count and class_0_count >= class_2_count:

или вы можете сравнить смаксимальное значение из двух:

if class_0_count >= max(class_1_count, class_2_count):
0 голосов
/ 26 октября 2019

Расширяя ответ @ MoeA выше:

A (альтернатива) Pythonic способ выполнить этот тест состоит в использовании функции all(), такой как:

if all([class_0_count >= class_1_count, class_0_count >= class_2_count]):
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...