Как работает цифровое сравнение - PullRequest
2 голосов
/ 15 марта 2019

Я новичок в этой области, этот скрипт используется для случайного получения 80% данных в тренировочном списке, а остальные 20% - в тестовом списке. Этот скрипт работает, но у меня есть несколько вопросов о том, почему он работает. Если len (data) равно 1000, то randn (1000) сгенерирует 1000 случайных чисел с нормальным распределением. Что я не понимаю: 1) Я проверяю себя, например, [1,2,3,4,5,6,7,8,9,10] <5 Я получил ошибку, потому что левый оператор - это список. Но почему check = a <0.8 законно, а должен быть список из 1000 элементов? </p>

import pandas as pd
import numpy as np 
data = pd.read_csv('E:/Personal/Learning/Datasets/Book/Customer ChurnModel.txt')
len(data)
a=np.random.randn(len(data))
check=a<0.8
training=data[check]
testing=data[~check]

Ответы [ 3 ]

4 голосов
/ 15 марта 2019

Массивы NumPy перегружают операторы сравнения для выполнения операции для каждого элемента, а не для контейнера.

Другими словами,

check=a<0.8

создаст новый массив NumPy check изтакая же длина как a такая, что:

check[i] = a[i] < 0.8
0 голосов
/ 15 марта 2019

В отличие от встроенных типов, таких как list, массивы numpy используют преимущества системы сравнения Python, переопределяя операторы сравнения. Это сделано для того, чтобы разрешить сравнение с атомарными типами, типами, похожими на массивы, и т. Д. Операторы расширенного сравнения возвращают новые массивы (а не просто True или False).

Любой может написать класс, который делает пользовательские сравнения , как numpy массивы.

Полезный совет: если вы используете functools.total_ordering, вам нужно только предоставить два метода , например, __eq__ и __lt__:

import functools

@functools.total_ordering
class Mine:
    def __eq__(self, other):
        ...
    def __lt__(self, other):
        ...

Остальные методы автоматически становятся интуитивно понятными, когда вы предоставляете правильное поведение для этих двух. Однако на практике, чтобы заставить класс работать так, как вы хотите, часто можно обнаружить, что необходимо настроить поведение других богатых методов сравнения: __ne__, __gt__, __le__ и __ge__.

0 голосов
/ 15 марта 2019

Хорошо, переменная проверки работает как логический объект, и в коде строка для этого является только присваиванием. С другой стороны, сравнение с двумя объектами должно быть одного типа. тип ([1,2,3,4,5,6,7,8,9,10]) -> объект 'list' тип (5) -> объект 'int'

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