python如何一次性取出多个随机数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何一次性取出多个随机数相关的知识,希望对你有一定的参考价值。

Python内置的函数一次只能生成一个随机数,然而你可以方便地使用表理解(list comprehension)一次性生成多个随机数。示例的代码如下:

import random

[random.randint(0,100) for _ in range(10)]
#[57, 93, 22, 55, 41, 64, 47, 32, 93, 61]

range函数输入不同的值,可以设置需要生成随机数的个数,上面的例子中生成了10个随机数。

参考技术A import random
a = range(1,20)
i = random.sample(a,5)
print(i)
#[5, 19, 6, 13, 2]

注意range是1-19不含20。sample里边的5指取5个数。


简写后:

import random
print(random.sample(range(1,3),2))
#[2,1]

参考技术B 随机数重不重复,范围多少?一次性取3个的单一函数在python标准库里没有,需要编点代码才能达到目的 参考技术C

4种方案

(1)random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。

(2)在固定列表中随机去多个数,random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。

(3)随机取多个数,random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。

(4)也可以用randint方法做到,从0~9中随机产生4个互不相等的数。

参考技术D a=[randint(范围) for _ in range(次数)] 这样就会return 一list的随机数字

如何将随机森林分类器应用于所有数据集,在 python 中一次一小部分

【中文标题】如何将随机森林分类器应用于所有数据集,在 python 中一次一小部分【英文标题】:How to apply a randomforest classifier to all of the dataset, a small section at a time in python 【发布时间】:2016-09-07 14:28:19 【问题描述】:

所以我正在做一个 Kaggle 比赛,测试数据集的大小是 880,000 行。我想在它的 10,000 行部分上应用一个随机森林分类器。但仍将其应用于所有内容。 这是我的分类器的设置方式

from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=100)
# Training data features, skip the first column 'Crime Category'
train_features = train[:, 1:]

# 'Crime Category' column values
train_target = train[:, 0]

clf = clf.fit(train_features, train_target)
score = clf.score(train_features, train_target)
"Mean accuracy of Random Forest: 0".format(score)

我用它来训练我的模型并获得准确性。我把训练数据缩小了,这样我就能更快地得到结果。但是为了让我提交给 Kaggle,我需要预测测试数据。基本上我想这样做:

test_x = testing_data[:, 1:]
print('-',*38)
for every 10,000 rows in test_x
   test_ y = clf.predict(value)
   print(".")
   add the values to an array then do the next 10,000 rows

对于每 10,000 行我想预测值,在某处添加预测值,然后执行接下来的 10,000 行。每当我一次完成所有 880,000 行时,我的计算机就会死机。我希望通过一次执行 10,000 行并使用 print(".") 我会得到一个进度条。我使用 test= test.values 将 test.csv 从 pandas dataframe 更改为 values

我尽可能多地提供了信息,如果您需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

使用pd.DataFrame,您可以使用新的DataFrame 迭代indexconcat 的结果块。对于np.array,请使用np.array_split

def chunks(l, n):
    """ Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

test_x = pd.DataFrame(test_x)
test_result = pd.DataFrame()
for chunk in chunks(test_x.index, 10000):
    test_data = test_x.ix[chunk]
    test_result = pd.concat([test_result, pd.DataFrame(clf.predict(test_data))])

【讨论】:

它给出了一个 AttributeError: 'numpy.ndarray' 对象没有属性 'index' 因为 test_x 是一个 numpy.ndarray。 看起来您使用的是numpy arrays,而不是pandas DataFrames。您可以选择使用test_x = DataFrame(test_x) 创建一个或需要为numpy 重写,例如使用np.array_split 我最终将我的 test_x 改回了 pandas,然后我收到了这个错误“无法连接非 NDFrame 对象”@Stefan Jansen 查看更新 - 还需要将 clf.predict(test_data)) 的输出转换为 pd.DataFrame() 不客气。通过接受答案将问题标记为已解决是一种很好的做法。【参考方案2】:

我假设您的索引是连续整数...

groups = test_x.groupby(test_x.index // 10000)
groups.apply(clf.predict)

如果索引不是连续整数,这是可能的...

groups = test.groupby(test.reset_index().index // 10000)

这是一个完整的例子...

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import numpy as np

iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

train, test = (df[:100], df[100:])
y_train, y_test = (iris.target[:100], iris.target[100:])

clf = RandomForestClassifier()
clf.fit(train, y_train)

groups = test.groupby(test.index // 10)
groups.apply(clf.predict)

输出是 Pandas 的一系列预测列表...

10    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
11    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
12    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
13    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
14    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

【讨论】:

【参考方案3】:

2018 年,来自 fast.ai 的 fastai 0.7 库有一个 set_rf_samples() 函数,它具有一些特殊功能。如果您登陆此页面,强烈建议您查看它。您可以在 Jeremy Howard 的 YouTube 频道上观看机器学习 MOOC 简介以及实施细节。

【讨论】:

以上是关于python如何一次性取出多个随机数的主要内容,如果未能解决你的问题,请参考以下文章

array_rand() 从数组中随机取出一个或多个单元

sql如何根据时间取出最新的数据记录

php中如何在数组中随机抽取n个数据的值

Python--从集合中随机取出一个元素

Python--从集合中随机取出一个元素

js如何生成指定范围内的随机数