您的位置:首页 > 编程语言 > Python开发

Python - Numpy 常见操作总结

2017-02-26 15:03 537 查看
NumPy 的主要对象是同种元素的多维数组。它的所有的元素都是一种类型,它的维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。
创建数组



例子:

>>> 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 numpy array