2.Numpy基础-对于数据和数组的使用

本篇使用的是ipython shell进行的直接测试,比在文本中需要显示编写print()函数要方便的多,在linux下直接执行sudo apt-get install ipython 即可安装.之后在控制台运行ipython –pylab,后缀是为了支持numpy的导入

创建等差数组:arange()函数

创建一个numpy等差数组,第一个数默认从零开始.
1.. arange(5):创建一个含有5个元素,0–4的一个数组

In [1]: a=arange(5)

In [2]: a
Out[2]: array([0, 1, 2, 3, 4])

2.. arange(1,5):创建一个含有4个元素,1–4的一个数组

In [3]: a=arange(1,5)

In [4]: a
Out[4]: array([1, 2, 3, 4])

3.. arange(1,9,2):创建一个含有4个元素,1,3,5,7的一个数组

In [5]: a=arange(1,9,2)

In [6]: a
Out[6]: array([1, 3, 5, 7])

生成数组:array()函数

array函数可以根据给定的对象生成数组.给定的对象应该是类数组,如python中的列表.

In [1]: a=array([arange(3),arange(1,4),arange(1,7,2)])

In [2]: a
Out[2]: 
array([[0, 1, 2],
       [1, 2, 3],
       [1, 3, 5]])

把数组列表作为参数传给array函数,创建了一个多维的数组.

数组维度:shape属性和reshape()函数

shape属性是数组的一个属性,返回一个元组(tuple),元组中的元素是该数组上每一个维度的大小.

In [1]: a=arange(9)

In [2]: a.shape
Out[2]: (9,)

我们定义了一个一维的数组,shape返回了,一个维度9个元素的信息.
也可以直接给shape属性赋值一个元组来为其改变维度:

In [1]: a=arange(24)

In [2]: a
Out[2]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

In [3]: a.shape=(2,3,4)

In [4]: a
Out[4]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

rashape()函数是用来为数组改变维度,分配每一个维度上的元素个数,如果分配的元素个数不符合原来数组会抛出异常

In [3]: a=arange(24).reshape(2,3,4)

In [4]: a.shape
Out[4]: (2, 3, 4)

In [5]: a
Out[5]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

24个元素的数组分成了2*3*4的三维向量.

取数组索引和切片

一维数组切片和索引:
跟python中的数组取法一致
1.取出第4个到第7个元素切片

In [1]: a=arange(9)

In [2]: a[3:7]
Out[2]: array([3, 4, 5, 6])

2.取出0-7,间隔2

In [3]: a[:7:2]
Out[3]: array([0, 2, 4, 6])

3.翻转数组

In [9]: a[::-1]
Out[9]: array([8, 7, 6, 5, 4, 3, 2, 1, 0])

多维数组的索引和切片:
还是利用上面的例子

In [1]: a=arange(24).reshape(2,3,4)

In [2]: a
Out[2]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

1.取出任一位置元素

In [3]: a[1,2,3]
Out[3]: 23

一定要记住,每一个维度的元素都是角标从0开始的.
*我们回顾并比较和一维数组取元素和切片写法,一维使用了”:”作为任意取值,而没有”,”,多维数组中利用了逗号来对维度进行分割,在每一个维度上的取值方式仍然跟一维数组一样.
我们来个看起来复杂,但实际只是不同维度单独取不同的部分:

In [4]: a[:,:2,::2]
Out[4]: 
array([[[ 0,  2],
        [ 4,  6]],

       [[12, 14],
        [16, 18]]])

第一维全部都要用了一个”:”
第二维要2个元素”:2”
第三维要全部但间隔为2取值
来看看翻转是不是跟一维数组一样:

In [5]: a[:,::-1,::-1]
Out[5]: 
array([[[11, 10,  9,  8],
        [ 7,  6,  5,  4],
        [ 3,  2,  1,  0]],

       [[23, 22, 21, 20],
        [19, 18, 17, 16],
        [15, 14, 13, 12]]])

显然我们是把第二个和第三个维度进行了翻转,接下来随意的在每个维度上不同取法试试:

In [6]: a[:,:1,::2]
Out[6]: 
array([[[ 0,  2]],

       [[12, 14]]])

In [7]: a[:,1,::2]
Out[7]: 
array([[ 4,  6],
       [16, 18]])

In [8]: a[1,1,::2]
Out[8]: array([16, 18])

数组展平:raval()和flatten()函数

raval()和flatten()都是用来展平数组的,但是flatten()展平后分配内存来保存结果,而raval()只是返回视图(view)

In [1]: a=arange(24).reshape(2,3,4)

In [2]: a
Out[2]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

In [3]: a.ravel()
Out[3]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

In [4]: a
Out[4]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

In [5]: a.flatten()
Out[5]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

数组转置:transpos()函数

数据处理中常用转置,用上面的例子转置:

In [6]: a.transpose()
Out[6]: 
array([[[ 0, 12],
        [ 4, 16],
        [ 8, 20]],

       [[ 1, 13],
        [ 5, 17],
        [ 9, 21]],

       [[ 2, 14],
        [ 6, 18],
        [10, 22]],

       [[ 3, 15],
        [ 7, 19],
        [11, 23]]])

数组的各种属性

ndim,数组的维数
size,数组的元素总个数
itemsize,元素在内存中的所占字节数
real,给出复数数组的实部
imag,给出复数数组的虚部
flat,属性将返回一个numpy.flatter对象,这是获得flatter对象的唯一方式

数组的拼接和分割

水平拼接hstack(a,b)
垂直拼接vstack(a,b)
行拼接row_stack(a,b)
列拼接colum_stack(a,b)
深度拼接dstack(a,b)

分成3个子组
水平分割hsplit(a,3)
垂直分割vsplit(a,3)
深度分割dsplit(a,3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值