【NumPy基础】100道numpy练习——Apprentice篇

@author:wepon

@blog:http://blog.csdn.net/u012162613/article/details/42811297


今天又用半小时扫了一下Apprentice篇里的10道exercise,不知道怎么翻译Apprentice(学徒~~)这个词,就直接以Apprentice篇作为题目了。numpy语法直白如水啊,花这些时间exercise有点浪费了.......Anyway,为了后面更熟练地用一些ML的包,利用闲暇时间扫一扫基本语法。原地址:https://github.com/rougier/numpy-100

1、将array属性设置为只读(read-only)

[python] view plaincopy
  1. >>> Z = np.zeros(10)
  2. >>> Z.flags.writeable = False
  3. >>> Z[0] = 1
  4. Traceback (most recent call last):
  5. File "<stdin>", line 1, in <module>
  6. ValueError: assignment destination is read-only

2、将笛卡尔坐标系下的点(x,y)转化为极坐标系的(R,T)

[python] view plaincopy
  1. >>> Z = np.random.random((10,2))
  2. >>> print Z
  3. [[ 0.49094922 0.58585236]
  4. [ 0.32265092 0.14445935]
  5. [ 0.8078448 0.70284832]
  6. [ 0.35341989 0.76888775]
  7. [ 0.01212107 0.43668101]
  8. [ 0.36924292 0.64075512]
  9. [ 0.22349212 0.4561141 ]
  10. [ 0.44836271 0.19591462]
  11. [ 0.6639701 0.16595659]
  12. [ 0.25559111 0.01741761]]
  13. >>> X,Y = Z[:,0], Z[:,1]
  14. >>> R = np.sqrt(X**2+Y**2)
  15. >>> T = np.arctan2(Y,X) %求反正切值
  16. >>> print R
  17. [ 0.76436518 0.35351396 1.07079829 0.84622337 0.4368492
  18. 0.73953192
  19. 0.50792598 0.48929711 0.684396 0.2561839 ]
  20. >>> print T
  21. [ 0.87330531 0.42096163 0.71600756 1.13994582 1.5430462
  22. 1.04801403
  23. 1.11518737 0.41195346 0.24492773 0.06804118]

3、获取数组中最大值/最小值对应的下标,argmax()、argmin()函数

[python] view plaincopy
  1. >>> Z = np.random.random(10)
  2. >>> print Z
  3. [ 0.90315764 0.06574957 0.86297424 0.46519603 0.01174512
  4. 0.60977188
  5. 0.52107975 0.6328012 0.12344019 0.05034712]
  6. >>> Z.argmax()
  7. 0
  8. >>> Z.argmin()
  9. 4

4、meshgrid()产生格点矩阵,用于三维曲面的分格线座标

[python] view plaincopy
  1. >>> Z = np.zeros((10,10), [('x',float),('y',float)])
  2. >>> Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,10),
  3. np.linspace(0,1,10))
  4. >>> print Z

5、各种数据类型的最大值/最小值,主要有8位、32位、64位整型,32位、64位浮点型

[python] view plaincopy
  1. >>> for dtype in [np.int8, np.int32, np.int64]:
  2. ... print np.iinfo(dtype).min
  3. ... print np.iinfo(dtype).max
  4. ...
  5. -128
  6. 127
  7. -2147483648
  8. 2147483647
  9. -9223372036854775808
  10. 9223372036854775807
  11. >>> for dtype in [np.float32, np.float64]:
  12. ... print np.finfo(dtype).min
  13. ... print np.finfo(dtype).max
  14. ... print np.finfo(dtype).eps
  15. ...
  16. -3.40282e+38
  17. 3.40282e+38
  18. 1.19209e-07
  19. -1.79769313486e+308
  20. 1.79769313486e+308
  21. 2.22044604925e-16

6、生成一个矩阵,矩阵中每个元素由坐标(x,y)以及颜色(r,g,b)组成

[python] view plaincopy
  1. >>> Z = np.zeros(10, [ ('position', [ ('x', float, 1),
  2. ... ('y', float, 1)]),
  3. ... ('color', [ ('r', float, 1),
  4. ... ('g', float, 1),
  5. ... ('b', float, 1)])])
  6. >>> print Z
  7. [((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))
  8. ((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))
  9. ((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))
  10. ((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))
  11. ((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))]

7、生成10个坐标(x,y),计算两两之间的距离

[python] view plaincopy
  1. >>> Z = np.random.random((10,2))
  2. >>> X,Y = np.atleast_2d(Z[:,0]), np.atleast_2d(Z[:,1])
  3. >>> D = np.sqrt( (X-X.T)**2 + (Y-Y.T)**2)
  4. >>> print D %D是10*10,对角线的值都是0

也可以直接用scipy里的cdist函数

[python] view plaincopy
  1. # Much faster with scipy
  2. import scipy
  3. Z = np.random.random((10,2))
  4. D = scipy.spatial.distance.cdist(Z,Z)
  5. print D

8、生成二维的高斯矩阵

[python] view plaincopy
  1. >>> X, Y = np.meshgrid(np.linspace(-1,1,10), np.linspace(-
  2. 1,1,10))
  3. >>> D = np.sqrt(X*X+Y*Y)
  4. >>> sigma, mu = 1.0, 0.0 %方差=1,均值=0
  5. >>> G = np.exp(-( (D-mu)**2 / ( 2.0 * sigma**2 ) ) )
  6. >>> print G
  7. [[ 0.36787944 0.44822088 0.51979489 0.57375342 0.60279818
  8. 0.60279818
  9. 0.57375342 0.51979489 0.44822088 0.36787944]
  10. [ 0.44822088 0.54610814 0.63331324 0.69905581 0.73444367
  11. 0.73444367
  12. 0.69905581 0.63331324 0.54610814 0.44822088]
  13. [ 0.51979489 0.63331324 0.73444367 0.81068432 0.85172308
  14. 0.85172308
  15. 0.81068432 0.73444367 0.63331324 0.51979489]
  16. [ 0.57375342 0.69905581 0.81068432 0.89483932 0.9401382
  17. 0.9401382
  18. 0.89483932 0.81068432 0.69905581 0.57375342]
  19. [ 0.60279818 0.73444367 0.85172308 0.9401382 0.98773022
  20. 0.98773022
  21. 0.9401382 0.85172308 0.73444367 0.60279818]
  22. [ 0.60279818 0.73444367 0.85172308 0.9401382 0.98773022
  23. 0.98773022
  24. 0.9401382 0.85172308 0.73444367 0.60279818]
  25. [ 0.57375342 0.69905581 0.81068432 0.89483932 0.9401382
  26. 0.9401382
  27. 0.89483932 0.81068432 0.69905581 0.57375342]
  28. [ 0.51979489 0.63331324 0.73444367 0.81068432 0.85172308
  29. 0.85172308
  30. 0.81068432 0.73444367 0.63331324 0.51979489]
  31. [ 0.44822088 0.54610814 0.63331324 0.69905581 0.73444367
  32. 0.73444367
  33. 0.69905581 0.63331324 0.54610814 0.44822088]
  34. [ 0.36787944 0.44822088 0.51979489 0.57375342 0.60279818
  35. 0.60279818
  36. 0.57375342 0.51979489 0.44822088 0.36787944]]

9、any函数,判断矩阵中的元素是否满足给定的条件,是的话返回True,否则返回False。例子:判断二维矩阵中有没有一整列数为0?

[python] view plaincopy
  1. >>> Z = np.random.randint(0,3,(2,10))
  2. >>> print Z
  3. [[1 0 1 2 2 0 1 0 1 0]
  4. [0 0 1 2 2 0 1 0 0 1]]
  5. >>> print Z.any(axis=0) %按列判断,全0则为False
  6. [ True False True True True False True False True True]
  7. >>> print (~Z.any(axis=0)).any()
  8. True

10、找出数组中与给定值最接近的数

[python] view plaincopy
  1. >>> Z=array([[0,1,2,3],[4,5,6,7]])
  2. >>> print Z
  3. [[0 1 2 3]
  4. [4 5 6 7]]
  5. >>> z=5.1
  6. >>> np.abs(Z - z).argmin()
  7. 5
  8. >>> print Z.flat[np.abs(Z - z).argmin()]
  9. 5

补充介绍:
flat是一个一维迭代器,将Z当成一维向量去遍历,Z[5]将超出原来矩阵的边界,Z.flat[5]才是正确的用法。
另外,不得不提flatten,它将矩阵摊平为一维向量:

[python] view plaincopy
  1. >>> Z.flatten()
  2. array([0, 1, 2, 3, 4, 5, 6, 7])

【NumPy基础】100道numpy练习——Apprentice篇相关推荐

  1. 数据分析之numpy基础/matplotlib绘图/numpy常用函数/杂项功能

    文章目录 数据分析 numpy概述 numpy`历史` numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象 ...

  2. python之numpy基础_Python之NumPy学习(基础篇)

    NumPy(NumericalPython的缩写)是一个开源的Python科学计算库.使用NumPy,就可以很自然的使用数组和矩阵.NumPy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机 ...

  3. 【numpy】20道numpy题目

    1.创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1 import numpy as npndarry =np.zeros(10) ndarry array([0., 0., ...

  4. 网络基础——100道面试题,你能答对多少?

    文章目录 1.网站登陆缓慢是什么原因? 2.a与b服务器不在同一网段怎么设置?设置完还ping不通怎么排查? 3.在AB两台服务器之间通过一个服务器c做软路由使用给路由器c配置两块网卡并开启自身的路由 ...

  5. python基础100道例题

    本部分来源于菜鸟教程100道中 菜鸟教程链接一百题地址:Python 100例 | 菜鸟教程 第一题 题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析: ...

  6. 别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!

    前面,已经为大家发布了Numpy系列的十篇文章,这里暂时告一段落,现为大家提供100道Numpy练习题,算是作为一个查漏补缺吧! 前面我为大家总结了Numpy中的常用函数,但是没有举例子解释说明.那么 ...

  7. 看图学NumPy:掌握n维数组基础知识点,看这一篇就够了

    晓查 编译整理  量子位 报道 | 公众号 QbitAI NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.然而对初学者来说,NumPy的大量运算方法非常难记. 最近, ...

  8. ios 取出数组中前两个元素_看图学NumPy:掌握n维数组基础知识点,看这一篇就够了...

    晓查 编译整理 量子位 报道 | 公众号 QbitAI NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.然而对初学者来说,NumPy的大量运算方法非常难记. 最近,国 ...

  9. 100道练习题,玩转Numpy模块!(上)

    100道练习题,玩转Numpy模块!(上) Numpy 介绍 Numpy 是 Python 做数据分析所必须要掌握的基础库之一.以下为入门 Numpy 的100题小练习,原为 github 上的开源项 ...

  10. numpy基础篇-简单入门教程4

    numpy基础篇-简单入门教程4 np.set_printoptions(precision=3),只显示小数点后三位 np.random.seed(100)rand_arr = np.random. ...

最新文章

  1. 消费者版 Vive Trackers 正式发布,只会与 Steam 1.0 基站适配
  2. python实现e2lsh高维数据集k近邻搜索——实现流程
  3. python人人贷爬虫_爬取人人贷网上部分借贷信息以及数据可视化
  4. YbtOJ#912-神秘语言【结论,欧拉定理】
  5. formdata.append加多个值_redis的五种数据结构和应用场景:微博微信点赞+加购物车等...
  6. 控件设置相对位置_惊人的Divi转换控件!
  7. mysql 序列化存储_如何将类序列化并直接存储入数据库
  8. Divergent series
  9. Jzoj5445【NOIP2017提高A组冲刺11.2】失格
  10. 轻松掌握namedtuple
  11. MyBatis3简介
  12. 什么是chirp信号
  13. [面试] 步步为营:吉大学士的PG宝洁面经
  14. css3边框交替动画_用纯CSS3制作的效果非常炫酷的元素边框线条动画特效
  15. ie无法下载 无法打开该internet站点.请求的站点不可用或无法找到.请稍后重试
  16. html网页随机一言,PHP简单实现一言 / 随机语录功能
  17. 中国石油大学(北京)-《汇编语言程序设计》第一阶段在线作业
  18. 腾讯最难lua面试题答案及解析
  19. in a future version of numpy, it will be understood as (type, (1,))
  20. 小姐姐拯救计划之我的NAS有ipv6域名之蛇皮操作

热门文章

  1. 介绍一下python getopt 模块
  2. k邻近算法应用实例(一) 改进约会网站的配对效果
  3. 第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制...
  4. 仙人掌(cactus)
  5. PHP读取CSV文件
  6. 2012 定制化产品探讨(周金根).pdf
  7. [原]工欲善其事,必先利其器,记一次处理Oracle Listener挂掉的处理过程
  8. vue里动态设置并获取ref
  9. 【转贴】 java 调用SAP RFC函数 报错信息搜集
  10. 初识java atomic