Python 获取真/假数组的len掩码

Python 获取真/假数组的len掩码,python,numpy,Python,Numpy,此代码适用于: 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_d

此代码适用于:

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]
all_history_data=pd.DataFrame()
数据百分比=0.8
#创建训练集和测试集
#此方法将随机选择我们数据的百分比数据
msk=np.random.rand(len(所有历史数据))<数据百分比
列车=所有历史数据[msk]
测试=所有历史数据[~msk]
但是,如果我不想要一个随机数,我尝试以下方法:

msk = range(len(all_historic_data)) < percent_of_data
msk=范围(len(所有历史数据))<数据百分比
我得到一个错误:

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

TypeError:“我假设
所有历史数据都是向量

如果你只想每次都得到完全相同的结果,一个潜在的解决方案是设置种子,这样“随机”生成的数字实际上总是相同的。您可以按如下方式执行此操作:

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)
既然你设定了一个种子,它的“随机”部分就消失了——你总是会得到相同的数字

事实上,结果是:

[ 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]
注意:
len(所有历史数据)
是一个int,因此
range(len(所有历史数据))
是一个范围对象,包含值0,1,…,len(所有历史数据)-1。例如,如果您运行

for i in range(10):
    print(i)
然后,输出将是

0
1
2
3
4
5
6
7
8
9
因此,您可以注意到,除第一个数字外,所有这些数字都将小于0.8。如果你用它来制作火车组,那么你的火车组中只有一个观测值


如果您仍然想将范围对象中的数字与浮点数进行比较,使用@Dan提到的
np.arange
,可能会有所帮助。

尝试使用
range
。而且,直接做就行了
n=len(所有历史数据)
msk=np.zeros(n).astype('bool')
msk[:int(数据的百分比*n)]=True
?是否要随机抽取给定百分比的总体样本?可以使用
random.choice
np.random.choice([True,False],len(所有历史数据),p=[0.8,0.2])
。您说“此代码有效”,但这行“msk=np.random.rand(len(所有历史数据))AttributeError:“list”对象没有属性“random”
请参阅编辑的文章。所有历史数据=pd.DataFrame()