前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 实用小技巧(6)

Python 实用小技巧(6)

作者头像
数据STUDIO
发布2021-06-24 10:09:18
4450
发布2021-06-24 10:09:18
举报
文章被收录于专栏:数据STUDIO

样本抽样

从100个样本中随机抽样10个。

代码语言:javascript
复制
>>> from random import randint,sample
>>> lst = [randint(0,50) for _ in range(100)]
>>> print(lst[:5])
[20, 8, 41, 23, 46]
>>> lst_sample = sample(lst,10)
>>> print(lst_sample)
[36, 28, 21, 0, 30, 15, 14, 33, 41, 41]

sample(population, k) 从一个总体序列或集合中选择k个唯一的随机元素。 返回包含从总体样本中抽取的元素的新列表,并保持原有总体不变。得到的子列表在顺序上也都是随机有效的样本。 总体的样本不需要是可哈希的或唯一的。如果总体包含重复,那么从样本中的选择时,每次都可能出现重复。 若要在整数范围内选择样本,请使用range作为参数。这是一种从大量数据集中获取样本的一种快速且高效的方式。如sample(range(10000000), 60)


打乱、重洗数据集

使用 shuffle 用来重洗数据集,值得注意是对lst就地(in place)洗牌,节省存储空间

代码语言:javascript
复制
>>> from random import shuffle
>>> lst = [randint(0,50) for _ in range(100)]
>>> shuffle(lst)
[7, 28, 5, 37, 45]

shuffle(x, random=None) 将列表x打乱,并返回None。 可选参数random是一个返回随机浮点[0.0,1.0)的0-argument函数;如果是默认的None,将使用标准的random.random


生成坐标点

10个均匀分布的坐标点

代码语言:javascript
复制
>>> from random import uniform
>>> [(uniform(0,10),uniform(0,10)) for _ in range(10)]
[(6.643596777616202, 3.5115242492691467),
 (3.4949560525825962, 7.510853289193182),
 (1.1092148827575243, 5.634172711274042),
 (9.183709555758819, 8.908040124716795),
 (7.594823632503429, 4.400078595488905),
 (4.647608230003916, 1.384902231109253),
 (5.9078617837913825, 0.37118346097973154),
 (4.537170273203939, 5.954232690970358),
 (3.3023378016785965, 2.1624635620941457),
 (3.542548865043048, 7.503268030444582)]

10个高斯分布的坐标点

random模块中的

gauss(u, \sigma)

生成均值为

u

, 标准差为

\sigma

的满足高斯分布的值,如下生成10个 二维坐标点,样本误差

(y-2\times x-1)

满足均值为0,标准差为1的高斯分布:

代码语言:javascript
复制
>>> from random import gauss
>>> x = range(10)
>>> y = [2*i+1+gauss(0,1) for i in x] 
>>> points = list(zip(x,y))
[(0, 1.223673868726624),
 (1, 4.176537183081072),
 (2, 5.117260621617949),
 (3, 8.71363059466428),
 (4, 10.187466638278366),
 (5, 11.492275314042141),
 (6, 15.54479507833611),
 (7, 15.190090448274328),
 (8, 17.593253407659496),
 (9, 19.468177475201106)]

函数的五类参数

python五类参数:位置参数, 关键字参数, 默认参数, 可变位置, 关键字参数的使用。

代码语言:javascript
复制
def f(a,*b,c=10,**d):
 print(f'a:{a},b:{b},c:{c},d:{d}')

默认参数c不能位于可变关键字参数d后。可变位置参数 b 实参后被解析为元组;而c取得默认值10; d被解析为字典。

代码语言:javascript
复制
>>> f(1,2,5,width=10,height=20)
a:1,b:(2, 5),c:10,d:{'width': 10, 'height': 20}
        
>>> f(a=1,c=12)
a:1,b:(),c:12,d:{}

a=1传入时a就是关键字参数,b,d都未传值,c被传入12,而非默认值。

注意观察参数 a , 既可以f(1) ,也可以 f(a=1) 其可读性比第一种更好,建议使用f(a=1)。如果要强制使用 f(a=1) ,需要在前面添加一个**星号 *** :

代码语言:javascript
复制
def f(*,a,*b):
  print(f'a:{a},b:{b}')

此时f(1)调用,将会报错: TypeError: f() takes 0 positional arguments but 1 was given 只能 f(a=1) .

说明前面的*发挥作用,它变为只能传入关键字参数,那么如何查看这个参数的类型呢?借助python 的 inspect 模块:

代码语言:javascript
复制
>>> for name,val in signature(f).parameters.items():
...    print(name,val.kind)
a KEYWORD_ONLY
b VAR_KEYWORD

可看到参数 a 的类型为 KEYWORD_ONLY,也就是仅仅为关键字参数

代码语言:javascript
复制
>>> def f(a,*b):
...   print(f'a:{a},b:{b}')
>>> for name,val in signature(f).parameters.items():
...   print(name,val.kind)
a POSITIONAL_OR_KEYWORD
b VAR_POSITIONAL

可以看到参数 a 既可以是位置参数也可是关键字参数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 样本抽样
  • 打乱、重洗数据集
  • 生成坐标点
    • 10个均匀分布的坐标点
      • 10个高斯分布的坐标点
      • 函数的五类参数
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档