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]])
突然有种高达上的感觉~!