设为首页 - 加入收藏 大理站长网 (http://www.0872zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 系统 2016 为什么 linux
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

小姐姐的Python隐藏技巧合集,推特2400赞,代码可以直接跑

发布时间:2019-10-28 11:22 所属栏目:[优化] 来源:栗子
导读:本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。 常常发资源的英伟达工程师小姐姐Chip Huyen,又发了一套Python隐藏功能合集。 里面都是她从前没发现,或者从前不太敢用的机器学习技巧,有notebook可以直接跑。 合集名叫python-is-coo

英伟达小姐姐的Python隐藏技巧合集,推特2400赞,代码可以直接跑

本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。

常常发资源的英伟达工程师小姐姐Chip Huyen,又发了一套Python隐藏功能合集。

里面都是她“从前没发现,或者从前不太敢用”的机器学习技巧,有notebook可以直接跑。

合集名叫python-is-cool,推特宣布之后不到半天,已经收获了2400+赞。

英伟达小姐姐的Python隐藏技巧合集,推特2400赞,代码可以直接跑

那么,这份令人奔走相告的资源,到底长什么样子?

隐藏技巧五大类

就像开头提到的:这里的功能,要么是小姐姐花了很久才找到的,要么是曾经让她瑟瑟发抖到不敢尝试的。

不过现在,她的技巧已经成功支配了这些功能,于是分享了出来。

目前一共有5个版块,专注机器学习,日后还会持续更新:

1、Lambda、Map、Filter、Reduce函数

lambda 关键字,是用来创建内联函数 (Inline Functions) 的。square_fn 和 square_ld 函数,在这里是一样的。

  1. 1def square_fn(x): 
  2. 2 return x * x 
  3. 4square_ld = lambda x : x * x 
  4. 6for i in range(10): 
  5. 7 assert square_fn(i) == square_ld(i) 

lambda 函数可以快速声明,所以拿来当回调 (Callbacks) 函数是非常理想的:就是作为参数 (Arguments) 传递给其他函数用的,那种函数。

和 map、filter 和 reduce 这样的函数搭配使用,尤其有效。

map(fn,iterable) 会把 fn 应用在 iterable 的所有元素上,返回一个map object。

  1. 1nums = [1/3, 333/7, 2323/2230, 40/34, 2/3] 
  2. 2nums_squared = [num * num for num in nums] 
  3. 3print(nums_squared) 
  4. 5==> [0.1111111, 2263.04081632, 1.085147, 1.384083, 0.44444444] 

这样调用,跟用有回调函数的 map 来调用,是一样的。

  1. 1nums_squared_1 = map(square_fn, nums) 
  2. 2nums_squared_2 = map(lambda x : x * x, nums) 
  3. 3print(list(nums_squared_1)) 
  4. 5==> [0.1111111, 2263.04081632, 1.085147, 1.384083, 0.44444444] 

map 也可以有不止一个 iterable。

比如,你要想计算一个简单线性函数 f(x)=ax+b 的均方误差 (MSE) ,两种方法就是等同的。

  1.  1a, b = 3, -0.5 
  2.  2xs = [2, 3, 4, 5] 
  3.  3labels = [6.4, 8.9, 10.9, 15.3] 
  4.  4 
  5.  5# Method 1: using a loop 
  6.  6errors = [] 
  7.  7for i, x in enumerate(xs): 
  8.  8 errors.append((a * x + b - labels[i]) ** 2) 
  9.  9result1 = sum(errors) ** 0.5 / len(xs) 
  10. 10 
  11. 11# Method 2: using map 
  12. 12diffs = map(lambda x, y: (a * x + b - y) ** 2, xs, labels) 
  13. 13result2 = sum(diffs) ** 0.5 / len(xs) 
  14. 14 
  15. 15print(result1, result2) 
  16. 16 
  17. 17==> 0.35089172119045514 0.35089172119045514 

要注意的是,map 和 filter 返回的是迭代器 (Iterator) ,这就是说它们的值不是存储的,是按需生成的。

当你调用了sum(diffs) 之后,diffs 就空了。如果你想要保留 diffs 里面所有的元素,就用 list(diffs) 把它转换成一个列表。

filter(fn,iterable) 也是和 map 一样道理,只不过 fn 返回的是一个布尔值,filter 返回的是,iterable 里面所有 fn 返回True的元素。

  1. 1bad_preds = filter(lambda x: x > 0.5, errors) 
  2. 2print(list(bad_preds)) 
  3. 4==> [0.8100000000000006, 0.6400000000000011] 

reduce(fn,iterable,initializer) 是用来给列表里的所有元素,迭代地应用某一个算子。比如,想要算出列表里所有元素的乘积:

  1. 1product = 1 
  2. 2for num in nums: 
  3. 3 product *= num 
  4. 4print(product) 
  5. 6==> 12.95564683272412 

上面这串代码,和下面这串代码是等同的:

  1. 1from functools import reduce 
  2. 2product = reduce(lambda x, y: x * y, nums) 
  3. 3print(product) 
  4. 5==> 12.95564683272412 

2、列表操作

小姐姐说,Python的列表太炫酷了。

2.1、解包 (Unpacking)

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章