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

【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)

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

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

>>> Z = np.random.random((10,2))
>>> print Z
[[ 0.49094922 0.58585236]
[ 0.32265092 0.14445935]
[ 0.8078448 0.70284832]
[ 0.35341989 0.76888775]
[ 0.01212107 0.43668101]
[ 0.36924292 0.64075512]
[ 0.22349212 0.4561141 ]
[ 0.44836271 0.19591462]
[ 0.6639701 0.16595659]
[ 0.25559111 0.01741761]]
>>> X,Y = Z[:,0], Z[:,1]
>>> R = np.sqrt(X**2+Y**2)
>>> T = np.arctan2(Y,X) %求反正切值
>>> print R
[ 0.76436518 0.35351396 1.07079829 0.84622337 0.4368492
0.73953192
0.50792598 0.48929711 0.684396 0.2561839 ]
>>> print T
[ 0.87330531 0.42096163 0.71600756 1.13994582 1.5430462
1.04801403
1.11518737 0.41195346 0.24492773 0.06804118]

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

>>> Z = np.random.random(10)
>>> print Z
[ 0.90315764 0.06574957 0.86297424 0.46519603 0.01174512
0.60977188
0.52107975 0.6328012 0.12344019 0.05034712]
>>> Z.argmax()
0
>>> Z.argmin()
4

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

>>> Z = np.zeros((10,10), [('x',float),('y',float)])
>>> Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,10),
np.linspace(0,1,10))
>>> print Z

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

>>> for dtype in [np.int8, np.int32, np.int64]:
... print np.iinfo(dtype).min
... print np.iinfo(dtype).max
...
-128
127
-2147483648
2147483647
-9223372036854775808
9223372036854775807
>>> for dtype in [np.float32, np.float64]:
... print np.finfo(dtype).min
... print np.finfo(dtype).max
... print np.finfo(dtype).eps
...
-3.40282e+38
3.40282e+38
1.19209e-07
-1.79769313486e+308
1.79769313486e+308
2.22044604925e-16

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

>>> Z = np.zeros(10, [ ('position', [ ('x', float, 1),
... ('y', float, 1)]),
... ('color', [ ('r', float, 1),
... ('g', float, 1),
... ('b', float, 1)])])
>>> print Z
[((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))
((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))
((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))
((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))
((0.0, 0.0), (0.0, 0.0, 0.0)) ((0.0, 0.0), (0.0, 0.0, 0.0))]

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

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

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

# Much faster with scipy
import scipy
Z = np.random.random((10,2))
D = scipy.spatial.distance.cdist(Z,Z)
print D

8、生成二维的高斯矩阵

>>> X, Y = np.meshgrid(np.linspace(-1,1,10), np.linspace(-
1,1,10))
>>> D = np.sqrt(X*X+Y*Y)
>>> sigma, mu = 1.0, 0.0 %方差=1,均值=0
>>> G = np.exp(-( (D-mu)**2 / ( 2.0 * sigma**2 ) ) )
>>> print G
[[ 0.36787944 0.44822088 0.51979489 0.57375342 0.60279818
0.60279818
0.57375342 0.51979489 0.44822088 0.36787944]
[ 0.44822088 0.54610814 0.63331324 0.69905581 0.73444367
0.73444367
0.69905581 0.63331324 0.54610814 0.44822088]
[ 0.51979489 0.63331324 0.73444367 0.81068432 0.85172308
0.85172308
0.81068432 0.73444367 0.63331324 0.51979489]
[ 0.57375342 0.69905581 0.81068432 0.89483932 0.9401382
0.9401382
0.89483932 0.81068432 0.69905581 0.57375342]
[ 0.60279818 0.73444367 0.85172308 0.9401382 0.98773022
0.98773022
0.9401382 0.85172308 0.73444367 0.60279818]
[ 0.60279818 0.73444367 0.85172308 0.9401382 0.98773022
0.98773022
0.9401382 0.85172308 0.73444367 0.60279818]
[ 0.57375342 0.69905581 0.81068432 0.89483932 0.9401382
0.9401382
0.89483932 0.81068432 0.69905581 0.57375342]
[ 0.51979489 0.63331324 0.73444367 0.81068432 0.85172308
0.85172308
0.81068432 0.73444367 0.63331324 0.51979489]
[ 0.44822088 0.54610814 0.63331324 0.69905581 0.73444367
0.73444367
0.69905581 0.63331324 0.54610814 0.44822088]
[ 0.36787944 0.44822088 0.51979489 0.57375342 0.60279818
0.60279818
0.57375342 0.51979489 0.44822088 0.36787944]]

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

>>> Z = np.random.randint(0,3,(2,10))
>>> print Z
[[1 0 1 2 2 0 1 0 1 0]
[0 0 1 2 2 0 1 0 0 1]]
>>> print Z.any(axis=0) %按列判断,全0则为False
[ True False True True True False True False True True]
>>> print (~Z.any(axis=0)).any()
True

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

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

补充介绍:

flat是一个一维迭代器,将Z当成一维向量去遍历,Z[5]将超出原来矩阵的边界,Z.flat[5]才是正确的用法。

另外,不得不提flatten,它将矩阵摊平为一维向量:

>>> Z.flatten()
array([0, 1, 2, 3, 4, 5, 6, 7])
时间: 2024-10-17 23:00:52

【NumPy基础】100道numpy练习——Apprentice篇的相关文章

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

[NumPy基础]100道numpy练习--进阶篇 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/42846777 选自numpy-100,当作熟悉NumPy的练习.NumPy只是一个数值计算的工具包,在实际的算法实现中来熟悉NumPy才是有效的,因此后面不打算继续写了,到此文为止,基本的语法已经够用了,之后在实践中总结可能效果更好.而且遇到问题参考NumPy官网文档即可. 之前两篇: [NumPy基础]1

100道numpy练习

100道numpy练习 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/42784403 今天在deeplearning.net上看theano tutorial,发现一个numpy-100-exercise,介绍numpy一些基本用法的,不过不是很具体,我利用闲暇时间照着敲了一些,权且当作翻译吧,增加函数的原型和详细介绍.持续更新. 一.初学者10道 1.在python环境中导入numpy包,并命名为np

利用 Python 进行数据分析(五)NumPy 基础:ndarray 索引和切片

概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为array[index1:index2],意思是从index1索引位置开始,到index2索引(不包括index2)位置结束的一段数组.例如: 当把一个值赋值为一个切片时,该值会作用于此数组片段里每一个元素,例如: 二维数组 二维数组的索引 当以一维数组的索引方式访问一个二维数组的时候,获取的元素不在

利用 Python 进行数据分析(四)NumPy 基础:ndarray 简单介绍

一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 二.ndarray 是什么 ndarray 是一个多维的数组对象,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点. ndarray 的一个特点是同构:即其中所有元素的类型必须相同. 三.ndarray 的创建 array() 函数 最简单的方法, 使用 NumPy 提供的

0x24 numpy基础,线性代数

01numpy的使用 1.numpy的两个基本元素 n维数组和矩阵 lst = [[1,3,8],[2,4,7]] arr = np.array(lst,dtype=float) mat = np.mat(lst,dtype=float) print('arr type:{}, \nmat type:{}'.format(type(arr),type(mat))) arr_add = arr + mat # narray 加矩阵 还是的等于矩阵 print('\nType:{}\nValue:\

《利用Python进行数据分析&#183;第2版》第四章 Numpy基础:数组和矢量计算

<利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对象.其C语言编写的算法库可以操作内存而不必进行其他工作.比起内置序列,使用的内存更少(即时间更快,空间更少) numpy可以在整个数组上执行复杂的计算,而不需要借助python的for循环 4.0 前提知识 数据:结构化的数据代指所有的通用数据,如表格型,多维数组,关键列,时间序列等 相关包:numpy pa

《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

第四章 Numpy基础:数组和矢量计算 实话说,用numpy的主要目的在于应用矢量化运算.Numpy并没有多么高级的数据分析功能,理解Numpy和面向数组的计算能有助于理解后面的pandas.按照课本的说法,作者关心的功能主要集中于: 用于数据整理和清理.子集构造和过滤.转换等快速的矢量化运算 常用的数组解法,如排序.唯一化.集合运算等 高效的描述统计和数据聚合/摘要运算 用于异构数据集的合并/连接运算的数据对齐和关系型数据运算 将条件逻辑表述为数组表达式(而不是带有if-elif-else分支

[转]python与numpy基础

来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb python与numpy基础 寒小阳(2016年6月) Python介绍 如果你问我没有编程基础,想学习一门语言,我一定会首推给你Python类似伪代码的书写方式,让你能够集中精力去解决问题,而不是花费大量的时间在开发和debug上同时得益于Numpy/Scipy这样的科学计算库,使得其有非常高效

《利用python进行数据分析》NumPy基础:数组和矢量计算 学习笔记

一.有关NumPy (一)官方解释 NumPy is the fundamental package for scientific computing with Python. It contains among other things: a powerful N-dimensional array object sophisticated (broadcasting) functions tools for integrating C/C++ and Fortran code useful