【3】数据分析-1-数据的处理--numpy--1

Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。

  • a powerful N-dimensional array object
  • sophisticated (broadcasting) functions
  • tools for integrating C/C++ and Fortran code
  • useful linear algebra, Fourier transform, and random number capabilities

更相信的说明见官网:https://docs.scipy.org/doc/numpy/reference/index.html

一、产看np的版本

    >>>import numpy as np
    >>>print np.version.version
    1.8.0rc1

查看np是64位还是32位

In [65]: import numpy.distutils.system_info as sysinfo

In [69]: sysinfo.platform_bits
Out[69]: 64
This is based on the value returned by platform.architecture():

In [71]: import platform
In [72]: platform.architecture()
Out[74]: ('64bit', 'ELF')

通常情况下,python64位的,numpy也就是64位的;32为的numpy内存有一定的限制

二、基本语法

  • NumPy数组的下标从0开始。
  • 同一个NumPy数组中所有元素的类型必须是相同的。

多维数组的类型是:numpy.ndarray,别名是 array。通常数组里的元素都是数字,Numpy的维度称为axes,通常都是排序的。

例如: [1, 2, 1] 是一个只有一个axis,且长度位3的一维数组。

下面的例子中是一个二维数组,一维的长度2,二维的长度是3。

    [[ 1., 0., 0.],
     [ 0., 1., 2.]]

ndarray有几个非常强大的属性:

ndarray.ndim axes的数量,在python的世界里,dimensions跟rank相关。

ndarray.shape 定义每个维度的长度,例如一个列数为n,行数位m的数组,其shape为(n,m),如果是三维的,你可以接着定义,如下面的例子

ndarray.size 多维数组里面元素的个数

ndarray.dtype 多维数组里面元素的数据类型,例如: numpy.int32, numpy.int16, numpy.float64

名称 描述
bool 用一个Bit存储的布尔类型(True或False)
inti 由所在平台决定其大小的整数(一般为int32或int64)
int8 一个字节大小,-128 至 127
int16 整数,-32768 至 32767
int32 整数,-2 ** 31 至 2 ** 32 -1
int64 整数,-2 ** 63 至 2 ** 63 – 1
uint8 无符号整数,0 至 255
uint16 无符号整数,0 至 65535
uint32 无符号整数,0 至 2 ** 32 – 1
uint64 无符号整数,0 至 2 ** 64 – 1
float16 半精度浮点数:16位,正负号1位,指数5位,精度10位
float32 单精度浮点数:32位,正负号1位,指数8位,精度23位
float64或float 双精度浮点数:64位,正负号1位,指数11位,精度52位
complex64 复数,分别用两个32位浮点数表示实部和虚部
complex128或complex 复数,分别用两个64位浮点数表示实部和虚部

ndarray.itemsize ndarray  对象中每个元素的大小,以字节为单位 the size in bytes of each element of the array. For example, an array of elements of type float64 has itemsize 8 (=648), while one of type complex32 has itemsize 4 (=328). It is equivalent to ndarray.dtype.itemsize.

ndarray.data the buffer containing the actual elements of the array. Normally, we won’t need to use this attribute because we will access the elements in an array using indexing facilities.

    >>> from numpy  import *
    >>> a = arange(15).reshape(3, 5)
    >>> a
    array([[ 0,  1,  2,  3,  4],
                 [ 5,  6,  7,  8,  9],
                 [10, 11, 12, 13, 14]])
    >>> a.shape
    (3, 5)
    >>> a.ndim
    2
    >>> a.dtype.name
    'int32'
    >>> a.itemsize
    4
    >>> a.size
    15
    >>> type(a)
    numpy.ndarray
    >>> b = array([6, 7, 8])
    >>> b
    array([6, 7, 8])
    >>> type(b)
    numpy.ndarray

    >>> print np.arange(24).reshape(2,3,4)
    [[[ 0  1  2  3]
        [ 4  5  6  7]
        [ 8  9 10 11]]

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

2.基本操作

见下一篇博文

3.基本运算

见下一篇博文

4.数据的读写

见下一篇博文

6.numpy的统计函数

sum(a, axis=None) 根据给定轴axis计算数组a相关元素之和,axis整数或元组
mean(a, axis=None) 根据给定轴axis计算数组a相关元素的期望,axis整数或元组
average(a,axis=None,weights=None) 根据给定轴axis计算数组a相关元素的加权平均值
std(a, axis=None) 根据给定轴axis计算数组a相关元素的标准差
var(a, axis=None) 根据给定轴axis计算数组a相关元素的方差

min(a) max(a) 计算数组a中元素的最小值、最大值
argmin(a) argmax(a) 计算数组a中元素最小值、最大值的降一维后下标
unravel_index(index, shape) 根据shape将一维下标index转换成多维下标
ptp(a) 计算数组a中元素最大值与最小值的差
median(a) 计算数组a中元素的中位数(中值)

6.numpy的梯度函数

np.gradient(f) 计算数组f中元素的梯度,当f为多维时,返回每个维度梯度 梯度:连续值之间的变化率,即斜率

XY坐标轴连续三个X坐标对应的Y轴值:a, b, c,其中,b的梯度是: (c‐a)/2

六、其他函数

logspace创建等比数列

先来看一个例子,我们让开始点为0,结束点为0,元素个数为10,看看输出结果。为什么是这样子?难道不都是0吗?

    >>> a = np.logspace(0,0,10)
    >>> a
    array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])

因为logspace中,开始点和结束点是10的幂,0代表10的0次方,9代表10的9次方。我们看下面的例子。

    >>> a = np.logspace(0,9,10)
    >>> a
    array([  1.00000000e+00,   1.00000000e+01,   1.00000000e+02,
                     1.00000000e+03,   1.00000000e+04,   1.00000000e+05,
                     1.00000000e+06,   1.00000000e+07,   1.00000000e+08,
                     1.00000000e+09])

    >>> a = np.logspace(0,9,10)
    >>> a
    array([  1.00000000e+00,   1.00000000e+01,   1.00000000e+02,
                     1.00000000e+03,   1.00000000e+04,   1.00000000e+05,
                     1.00000000e+06,   1.00000000e+07,   1.00000000e+08,
                     1.00000000e+09])

假如,我们想要改变基数,不让它以10为底数,我们可以改变base参数,将其设置为2试试。

    >>> a = np.logspace(0,9,10,base=2)
    >>> a
    array([   1.,    2.,    4.,    8.,   16.,   32.,   64.,  128.,  256.,  512.])

更多例子参见:numpy官网

参考资料:

http://www.jb51.net/article/49397.htm

http://wiki.scipy.org/Tentative_NumPy_Tutorial

http://blog.csdn.net/sunny2038/article/details/9002531

http://blog.csdn.net/shenpengjianke/article/details/29356755

北京理工大学 嵩天老师 课件

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学