Python - Numpy 常见操作总结
2017-02-26 15:03
537 查看
NumPy 的主要对象是同种元素的多维数组。它的所有的元素都是一种类型,它的维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。
创建数组
例子:
常见属性
例子:
更改形状
例子:
注意:一个数组的切片总是产生一个最低可能维度的数组。例如,如果 C 是一个二维数组(2*2), C[0] ,c[:,0]产生一个一维的数组,shape 为 (2,),它并不会返回一个 shape 为 (1,2)或(2,1)的数组,因此如果需要,在获得一个子数组时,用
reshape 或 reszie 固定子数组形状。
基本运算
数组的算术运算是按元素的。
例子:
索引、切片和迭代
例子:
基本统计函数
例子:
组合(stack)和分隔(split)
例子:
复制和视图
完全不拷贝:简单的赋值不拷贝数组对象,它们指向同一对象。
视图(view)和浅复制:不同的数组对象分享同一个数据。
深复制(copy):完全复制数组和它的数据。
例子:
数组文件的输入输出
例子:
保存的文件:
[root@localhost xugf]# cat a.txt #默认格式文件,以空格分隔
0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00
3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00
6.000000000000000000e+00 7.000000000000000000e+00 8.000000000000000000e+00
[root@localhost xugf]# cat b.txt #指定格式文件,逗号分隔
0,1,2
3,4,5
6,7,8
参考:http://www.360doc.com/content/15/0209/20/2459_447540142.shtml
创建数组
例子:
>>> from numpy import * #导入 numpy 的所有函数 >>> array ([1,2,3]) array([1, 2, 3]) >>> array([[1,2],[3,4]]) array([[1, 2], [3, 4]]) >>> >>> arange(4, dtype=float) #创建等差数列,指定元素类型为 float array([ 0., 1., 2., 3.]) >>> arange(0, 10, 2) #指定差值为 2 array([0, 2, 4, 6, 8]) >>> linspace(0, 10, 5) #生成 5 个 0~10 之间的等差数列 array([ 0. , 2.5, 5. , 7.5, 10. ]) >>> >>> a = ones(3) >>> a array([ 1., 1., 1.]) >>> zeros((2, 2)) #生成一个二维数组 array([[ 0., 0.], [ 0., 0.]]) >>> zeros_like(a) #创建一个与数组 a 结构相同的 0 数组 array([ 0., 0., 0.]) >>> eye(3) array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])
常见属性
例子:
>>> a = array([1,2,3]) >>> a.ndim 1 >>> a.shape #注意:此时数组维度不是(3,1) 或 (1,3) (3,) >>> a.dtype dtype('int64') >>> b = array([[1,2], [3,4]], dtype = float) >>> b.shape (2, 2) >>> b.ndim 2 >>> b.items b.itemset( b.itemsize >>> b.itemsize 8
更改形状
例子:
>>> a = arange(12) >>> a array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) >>> a.reshape(3,4) #不改变原数组形状 array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> a array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) >>> a.resize(3,4) #改变原数组形状 >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> a.shape = (4,3) #直接赋值,改变原数组形状 >>> a array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]) >>> a.ravel() #优先排列最右边索引 array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
注意:一个数组的切片总是产生一个最低可能维度的数组。例如,如果 C 是一个二维数组(2*2), C[0] ,c[:,0]产生一个一维的数组,shape 为 (2,),它并不会返回一个 shape 为 (1,2)或(2,1)的数组,因此如果需要,在获得一个子数组时,用
reshape 或 reszie 固定子数组形状。
基本运算
数组的算术运算是按元素的。
例子:
>>> a = array([[1,1], [1,1]]) #创建两个数组 >>> b = array([[0,1], [2,3]]) >>> a + b array([[1, 2], [3, 4]]) >>> a - b array([[ 1, 0], [-1, -2]]) >>> a * b #对应元素相乘 array([[0, 1], [2, 3]]) >>> a += b array([[1, 2], [3, 4]]) >>> dot(a, b) #矩阵相乘 array([[2, 4], [2, 4]]) >>> inv(b) #求逆 array([[-1.5, 0.5], [ 1. , 0. ]]) >>> b.transpose() #转置 array([[0, 2], [1, 3]]) >>> sin(b) array([[ 0. , 0.84147098], [ 0.90929743, 0.14112001]]) >>> exp(b) array([[ 1. , 2.71828183], [ 7.3890561 , 20.08553692]]) >>> c,d = linalg.eig(a) #求a 的特征值和特征向量 >>> c array([ 2., 0.]) >>> d array([[ 0.70710678, -0.70710678], [ 0.70710678, 0.70710678]]) >>>
索引、切片和迭代
例子:
>>> a = arange(6) >>> a[0] 0 >>> a[1:3] array([1, 2]) >>> a[0:4:2] array([0, 2]) >>> b = arange(16).reshape(4,4) >>> b array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]]) >>> b[0] #第一行 array([0, 1, 2, 3]) >>> b[:,1] #第一列 array([ 1, 5, 9, 13]) >>> b[1,3] 7 >>> b[0:2,2] array([2, 6])
基本统计函数
例子:
>>> b array([[ 1., 2.], [ 3., 4.]]) >>> b.max() #数组最大值 4.0 >>> b.max(1) #每行最大值 array([ 2., 4.]) >>> b.sum(0) #求每列的总和 array([ 4., 6.]) >>> b.mean(1) #每行均值 array([ 1.5, 3.5])
组合(stack)和分隔(split)
例子:
>>> a = array([[1,2],[3,4]]) >>> b = array([[1,1],[1,1]]) >>> c = vstack((a, b)) #以行组合 >>> c array([[1, 2], [3, 4], [1, 1], [1, 1]]) >>> d = hstack((a, b)) #以列组合 >>> d array([[1, 2, 1, 1], [3, 4, 1, 1]]) >>> vsplit(c, 2) #以行方式,分成两个数组 [array([[1, 2], [3, 4]]), array([[1, 1], [1, 1]])] >>> hsplit(c, 2) #以列方式,分成两个数组 [array([[1], [3], [1], [1]]), array([[2], [4], [1], [1]])] >>> vsplit(c, a.shape) #以行方式,按数组 a 的形状分割 [array([[1, 2], [3, 4]]), array([], shape=(0, 2), dtype=int64), array([[1, 1], [1, 1]])] >>> vsplit(c, (2,2)) #以行方式,按给定形式分割 [array([[1, 2], [3, 4]]), array([], shape=(0, 2), dtype=int64), array([[1, 1], [1, 1]])]
复制和视图
完全不拷贝:简单的赋值不拷贝数组对象,它们指向同一对象。
视图(view)和浅复制:不同的数组对象分享同一个数据。
深复制(copy):完全复制数组和它的数据。
例子:
>>> a = arange(4) #简单复制,指向同一对象 >>> a array([0, 1, 2, 3]) >>> b = a >>> b is a True >>> b[0] = 1 >>> b array([1, 1, 2, 3]) >>> a array([1, 1, 2, 3]) >>> c = a.view() #视图复制,指向同一数据 >>> c is a False >>> c.base is a True >>> c[0] = 2 >>> c array([2, 1, 2, 3]) >>> a array([2, 1, 2, 3]) >>> d = a.copy() #深复制,完全分离 >>> d is a False >>> d.base is a False >>>
数组文件的输入输出
例子:
>>> a = arange(9).reshape(3,3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> save('a_array', a) #二进制格式 >>> b = load('a_array.npy') >>> b array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> savetxt('a.txt', a) #默认‘%.18e’格式,以空格分隔 >>> c = loadtxt('a.txt') >>> c array([[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.]]) >>> savetxt('b.txt', a, fmt="%d",delimiter=",") #指定‘%d’格式,指定以‘,’分隔 >>> d = loadtxt('b.txt', delimiter=",") >>> d array([[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.]]) >>>
保存的文件:
[root@localhost xugf]# cat a.txt #默认格式文件,以空格分隔
0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00
3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00
6.000000000000000000e+00 7.000000000000000000e+00 8.000000000000000000e+00
[root@localhost xugf]# cat b.txt #指定格式文件,逗号分隔
0,1,2
3,4,5
6,7,8
参考:http://www.360doc.com/content/15/0209/20/2459_447540142.shtml
相关文章推荐
- Python文件与文件夹常见基本操作总结
- Python中字符串的常见操作总结
- Python中字符串常见操作总结
- Python Numpy 线性代数操作总结(随时更新)
- Python中字符串的常见操作技巧总结
- Python对数据shape的常见操作总结
- Python常见MongoDB数据库操作实例总结
- Python文件与文件夹常见基本操作总结
- Python矩阵常见运算操作实例总结
- Python中字符串的常见操作技巧总结
- python 常见面试问题(3)-单例模式/lambda函数/类型转换/文件操作/查询和替换/Fibonacci数列
- Python字典与集合操作总结
- python操作Excel画图总结
- python 基础操作知识整理总结
- Python常见文件操作的函数示例
- python常见函数修饰符总结(不断更新)
- Python常见文件操作的函数
- SVN 常见问题操作总结
- Python常见文件操作的函数示例代码
- Python常见文件操作的函数示例代码