numpy基础操作

1.创建数组:

创建数组的几种方式:

    >>> import numpy as np
创建一维数组
>>> a=np.array([1,2,3,4])
>>> print a
[1 2 3 4]
>>> b=np.arange(5)
>>> print b
[0 1 2 3 4]
创建二维数组
>>> c=np.array([[1,2,3],[4,5,6]])
>>> print c
[[1 2 3]
 [4 5 6]]
>>> d=np.arange(15).reshape(3,5)
>>> print d
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
创建三维数组
>>> e=np.arange(16).reshape(2,2,4)
>>> print e
[[[ 0  1  2  3]
  [ 4  5  6  7]]
 [[ 8  9 10 11]
  [12 13 14 15]]]

2.数组的基本属性

数组轴的个数
>>> a.ndim
1
>>> c.ndim
2
>>> e.ndim
3
数组在每个维度上的大小
>>> a.shape
(4L,)
>>> c.shape #表示一个2行3列的二维数组
(2L, 3L)
>>> e.shape
(2L, 2L, 4L)
数组元素的个数
>>> a.size #数组a有4个元素
4
>>> e.size
16
数组元素的类型
>>> a.dtype
dtype('int32')

3.特殊的数组

通常,数组的元素开始都是未知的,但是它的大小已知。因此,NumPy提供了一些使用占位符创建数组的函数。这最小化了扩展数组的需要和高昂的运算代价。

函数zeros创建一个全是0的数组,函数ones创建一个全1的数组,函数empty创建一个内容随机并且依赖与内存状态的数组,函数eye创建一个对角为1,其余元素均为0的数组。默认创建的数组类型(dtype)都是float64。

>>> np.zeros((2,3))
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> np.ones((2,3))
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> np.empty((2,3))
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> np.eye(3)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

4.基本运算

数组的算术运算是按元素的。新的数组被创建并且被结果填充。 生成一个1到12,步长为2的一维数组,然后重组为二维数组

>>> a=np.arange(1,12,2).reshape(2,3) 
>>> print a
[[ 1  3  5]
 [ 7  9 11]]
>>> b=np.array([[1,2,3],[1.1,2,5]]) #生成一个23列的数组
>>> print b
[[ 1.   2.   3. ]
 [ 1.1  2.   5. ]]
>>> print a+b #求和,注意到结果为浮点数
[[  2.    5.    8. ]
 [  8.1  11.   16. ]]
>>> print a**2 #对每个元素求平方
[[  1   9  25]
 [ 49  81 121]]
>>> a<8
array([[ True,  True,  True],
       [ True, False, False]], dtype=bool)

NumPy中的乘法运算符*指示按元素计算,矩阵乘法可以使用dot函数或创建矩阵对象实现

>>> a=np.arange(4).reshape(2,2)
>>> print a
[[0 1]
 [2 3]]
>>> b=np.ones((2,2))
>>> print b
[[ 1.  1.]
 [ 1.  1.]]
>>> print a*b #元素乘法
[[ 0.  1.]
 [ 2.  3.]]
>>> print np.dot(a,b) #矩阵乘法
[[ 1.  1.]
 [ 5.  5.]]

更改数据:+=和*=

>>> a=np.array([[1,2,3],[2,2,2]])
>>> print a
[[1 2 3]
 [2 2 2]]
>>> a+=a
>>> print a
[[2 4 6]
 [4 4 4]]

通过指定axis参数,可以把运算应用到数组指定的轴上:

>>> a=np.arange(15).reshape(3,5)
>>> print a
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
>>> a.sum(axis=0) #按列求和
array([15, 18, 21, 24, 27])
>>> a.cumsum(axis=1) #按行累计求和
array([[ 0,  1,  3,  6, 10],
       [ 5, 11, 18, 26, 35],
       [10, 21, 33, 46, 60]])
通用函数

NumPy提供常见的数学函数如 sin , cos 和 exp 。在NumPy中,这些叫作“通用函数”(ufunc)。在NumPy里这些函数作用按数组的元素运算,产生一个数组作为输出。

>>> a=np.arange(8).reshape(2,4)
>>> print a
[[0 1 2 3]
 [4 5 6 7]]
>>> np.sin(a)
array([[ 0.        ,  0.84147098,  0.90929743,  0.14112001],
       [-0.7568025 , -0.95892427, -0.2794155 ,  0.6569866 ]])
>>> np.exp(a)
array([[  1.00000000e+00,   2.71828183e+00,   7.38905610e+00,
          2.00855369e+01],
       [  5.45981500e+01,   1.48413159e+02,   4.03428793e+02,
          1.09663316e+03]])

5.索引,切片和迭代

数组可以被索引、切片和迭代

>>> a=np.arange(12).reshape(2,6)
>>> print a
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
>>> a[1,1] #通过索引获取
7
>>> a[:,2:4] #切片
array([[2, 3],
       [8, 9]]) 
>>> for row in a : #多维数组的迭代是就第一个轴而言的
...     print a
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
>>> for element in a.flat: #flat属性是数组元素的一个迭代器
...     print element
0
1
2
3
4
5
6
7
8
9
10
11 

6.更改数组的形状

>>> a=10*np.random.random((2,3)) #随机生成一个2行3列的数组
>>> print a
[[ 4.45788427  6.3795204   3.86761568]
 [ 4.14255256  1.43151891  0.13187492]]
>>> b=np.floor(a) #对元素只保留整数部分
>>> print b
[[ 4.  6.  3.]
 [ 4.  1.  0.]]
>>> b.ravel() #展平数组元素
array([ 4.,  6.,  3.,  4.,  1.,  0.]) 
>>> b.shape=(3,2) #将b转换成3行2列的数组
>>> print b
[[ 4.  6.]
 [ 3.  4.]
 [ 1.  0.]]
>>> b.transpose() #转置,但不改变原数组
array([[ 4.,  3.,  1.],
       [ 6.,  4.,  0.]])
>>> print b
[[ 4.  6.]
 [ 3.  4.]
 [ 1.  0.]] 

7.数组组合

可以沿不同的轴方向将数组组合在一起

>>> a=np.arange(6).reshape(2,3)
>>> b=np.array([[2,3,4],[6,7,8]])
>>> print a
[[0 1 2]
 [3 4 5]]
>>> print b
[[2 3 4]
 [6 7 8]]
>>> np.vstack((a,b))
array([[0, 1, 2],
       [3, 4, 5],
       [2, 3, 4],
       [6, 7, 8]])
>>> np.hstack((a,b))
array([[0, 1, 2, 2, 3, 4],
       [3, 4, 5, 6, 7, 8]])        

8.数组分割

使用numpy.hsplit沿着水平轴将数组分割,可以指定分割成几个数组,也可以指定在哪些列后分割。类似的,numpy.vsplit沿着纵向方向分割。

>>> a=np.arange(16).reshape(4,4)
>>> print a
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
>>> np.hsplit(a,2) #沿着水平方向将数组分割成2个
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
>>> np.hsplit(a,(1,3)) #在第1列和第3列前分割
[array([[ 0],
       [ 4],
       [ 8],
       [12]]), array([[ 1,  2],
       [ 5,  6],
       [ 9, 10],
       [13, 14]]), array([[ 3],
       [ 7],
       [11],
       [15]])]       

9.浅复制和深复制

简单的赋值既不拷贝对象,也不拷贝数据

>>> a=np.arange(4)
>>> b=a
>>> b is a #a和b是同一个数组对象的两个不同的名字
True
>>> b[0]=10 
>>> print a[0] #a中元素也跟着改变
10

浅复制:不同的数组对象分享同一个数据。视图方法创造一个新的数组对象指向同一数据。

>>> c=a.view()
>>> c is a #c和a指向两个不同的对象
False
>>> c.shape=(2,2)
>>> a.shape #a的维度不改变
(4L,)
>>> c[0,0]=99
>>> a[0] #a中数据改变
99

切片操作其实返回的是一个视图

>>> d=a[:2]
>>> d[:]=11
>>> print a
[11 11  2  3]

深复制:完全复制数组对象和数据

>>> e=a.copy()
>>> e[:]=0
>>> print a #a的元素不改变
[11 11  2  3]

10.基本统计

>>> a=np.array([2,4])
>>> np.cov(a)
array(2.0)
>>> np.mean(a)
3.0
>>> np.std(a)
1.0
>>> np.var(a)
1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值