我是该领域的新手,该脚本用于将80%的数据随机获取到训练列表中,其余的20%从测试列表中获取。该脚本有效,但是我对它为什么起作用有一些疑问。 如果len(data)为1000,则randn(1000)将生成具有正态分布的1000个随机数。我不明白的是: 1)我测试了自己,例如[1,2,3,4,5,6,7,8,9,10] <5我得到一个错误,因为左运算符是一个列表。但是为什么check = a <0.8合法,a应该是1000个元素的列表?
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]
答案 0 :(得分:4)
NumPy数组使比较运算符超载,以按元素而不是按容器执行操作。
换句话说,
check=a<0.8
将创建一个新的NumPy数组check
,其长度与a
相同,这样:
check[i] = a[i] < 0.8
答案 1 :(得分:0)
好检查变量用作布尔对象,在代码中,该行仅是赋值。 另一方面,与两个对象的比较必须是同一类型。 type([1,2,3,4,5,6,7,8,9,10])->'列表'对象 type(5)->'int'对象
答案 2 :(得分:0)
与list
等内置类型相反,numpy
数组通过重写比较运算符来利用Python丰富的比较系统。这是为了允许与原子类型,类似numpy数组的类型等进行比较。丰富的比较运算符返回新数组(而不只是True
或False
)。
任何人都可以编写does custom comparisons类似于numpy
数组的类。
有用的提示:如果您使用functools.total_ordering
,则只需provide two methods,例如__eq__
和__lt__
:
import functools
@functools.total_ordering
class Mine:
def __eq__(self, other):
...
def __lt__(self, other):
...
当您为这两种方法提供正确的行为时,其余方法将自动进行排序。但是在实践中,要使一类按您希望的方式工作,通常会发现需要自定义其他丰富比较方法的行为:__ne__
,__gt__
,__le__
,和__ge__
。