NumPy

python里内置的数据类型里没有多维数组,NumPy是一个数据分析的包,提供了一个N维数组对象ndarray,可以作为大数据容器做一些数据计算

通过sourceforge很容易下载到NumPy,但假如是在windows下安装的时候,要注意python一定要安装32bit版本,因为NumPy提供的只有32bit的,假如你安装了个64bit的python,在安装NumPy过程中会找不到python,除此之外还要注意环境变量path

安装好了之后,老规矩只需要import一下只要不出现error表示安装成功,一般来说,import的时候写法是:import numpy as np,就不要from numpy import * 这样了

下面可以创建一个NumPy数组瞧瞧

>>> import numpy as np
>>> data = np.array([1, 2, 3])
>>> data
array([1, 2, 3])
>>> data.shape
(3,)
>>> data.dtype
dtype('int64')
>>> data * 2
array([2, 4, 6])
>>> data + data + data
array([3, 6, 9])

一看这个array就非同一般,起码最后两个,正常python的数组结构运行结果是连接符的效果,或者说append(list)的作用,而这里是将每个元素进行分别计算;dtype说明的是数组元素的类型,而还有一个shape是数组的维度大小的一个元组类型,这里因为是一维数组,所以只有一个数字

这里是以一个普通的python内置列表对象[1, 2, 3]为例,进而被转换成了一个ndarray类型数组,其实可以接受一切序列型的对象(元组,列表,数组都行),下面是一个元组进行转换

>>> import numpy as np
>>> a = ([1, 2], [3, 4], [5.1, 6.1], [7.0, 8.0])
>>> data = np.array(a)
>>> data
array([[ 1. ,  2. ],
       [ 3. ,  4. ],
       [ 5.1,  6.1],
       [ 7. ,  8. ]])
>>> data.shape
(4, 2)
>>> data.dtype
dtype('float64')
>>> data * 2
array([[  2. ,   4. ],
       [  6. ,   8. ],
       [ 10.2,  12.2],
       [ 14. ,  16. ]])
>>>

可见这里是一个4 * 2 维数组,也能够转换成NumPy的ndarray数组类型

1:ndarray数组创建函数

array:将输入的序列数据类型转换成ndarray,默认直接复制输入的数据

asarray:与array一样,只不过假如输入本身就是一个ndarray,就不进行复制

arange:类似于内置的range,但是返回的是一个ndarray类型而不是普通列表

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

ones,ones_like:根据指定的形状和dtype创建一个全为1的数组;ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组

zeros,zeros_like:和上面一样,只不过创建的全0数组

empty,empty_like:创建新数组,只分配内存空间,但没填充数据

eye,identity:创建一个正方的N * N单位矩阵(对角线为1,其余为0)

>>> np.ones((4, 5))
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.]])
>>> np.zeros((4, 5))
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])
>>> np.eye(5)
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])

2:ndarray数据类型

NumPy中数据类型一大堆,都可以通过dtype来查看,其实dtype也是一个特殊的对象(好像是废话,python一切皆为对象),它包含了ndarray将一块内存解释为特定数据类型所需要的信息,比如下面例子

>>> data = [1, 2, 3]
>>> a = np.array(data, dtype=np.float64)
>>> b = np.array(data, dtype=np.int32)
>>> a.dtype
dtype('float64')
>>> b.dtype
dtype('int32')

类型后面一个数字表示了元素位长,类型可以自行网上搜索下,8~128位的数据类型都有,甚至还有object,string,unicode等

可以通过ndarray的astype方法显式转换dtype

>>> data = [1, 2, 3]
>>> a = np.array(data)
>>> a.dtype
dtype('int64')
>>> a
array([1, 2, 3])
>>> b = a.astype(np.float64)
>>> b.dtype
dtype('float64')
>>> b
array([ 1.,  2.,  3.])

再来个字符串

>>> c = a.astype(np.string_)
>>> c.dtype
dtype('S24')
>>> c
array(['1', '2', '3'],
      dtype='|S24')

虽然很奇怪,但是好像很厉害的样子

3:数组计算

这里数组可以批量计算

>>> import numpy as np
>>> data = ([1, 2, 3], [4.1, 5.2, 6.3])
>>> a = np.array(data)
>>> a
array([[ 1. ,  2. ,  3. ],
       [ 4.1,  5.2,  6.3]])
>>> a * a
array([[  1.  ,   4.  ,   9.  ],
       [ 16.81,  27.04,  39.69]])
>>> a / a
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> a - a
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> 1 / a
array([[ 1.        ,  0.5       ,  0.33333333],
       [ 0.24390244,  0.19230769,  0.15873016]])
>>> a ** 2
array([[  1.  ,   4.  ,   9.  ],
       [ 16.81,  27.04,  39.69]])

突然有种高达上的感觉~!

发表回复