NumPy

作者: Epiphanyyaoyao | 来源:发表于2017-05-30 00:47 被阅读0次

    定义数组array:
    a = np.arange(20)

    创建多维数组
    a.reshape(4,5)

    定义零矩阵
    np.zeros((4,5))

    简单的四则运算已经重载过了,全部的+,-,*,/运算都是基于全部的数组元素的。
    NumPy里这些运算符也可以对标量和数组操作,结果是数组的全部元素对应这个标量进行运算,还是一个数组。

    在处理中Python会自动将整数转换为浮点数(因为数组是同质的),并且,两个二维数组相加要求各维度大小相同。

    类似C++,+=、-=、*=、/=操作符在NumPy中同样支持。

    科学计算中大量使用到矩阵运算,除了数组,NumPy同时提供了矩阵对象(matrix)。矩阵对象和数组的主要有两点差别:一是矩阵是二维的,而数组的可以是任意正整数维;二是矩阵的操作符进行的是矩阵乘法,乘号左侧的矩阵列和乘号右侧的矩阵行要相等,而在数组中操作符进行的是每一元素的对应相乘,乘号两侧的数组每一维大小需要一致。

    数组可以通过asmatrix或者mat转换为矩阵。
    a = np.arange(20).reshape(4, 5)
    a = np.asmatrix(a)
    a = mp.mat(a)

    b = np.matrix('1.0 2.0; 3.0 4.0')

    arange函数还可以通过arange(起始,终止,步长)的方式调用生成等差数列,注意含头不含尾。
    arange指定的是步长,如果想指定生成的一维数组的长度怎么办?好办,linspace就可以做到:
    np.linspace(0, 2, 9)

    array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])

    可以通过下标访问来修改数组元素的值。

    【陷阱】
    a = np.array([[3.2, 1.5], [2.5, 4]])
    b=a
    这里的b只是复制了一下a的内存地址,并没有真正复制一份a的数据,因此改变a的值同时也会改变b的值。若想避免这个问题,使用copy函数。
    b = a.copy()

    可使用where函数查找特定值在数组中的位置:
    loc = numpy.where(a==11)
    print loc

    print a[loc[0][0], loc[1][0]]

    数组转置(用于矩阵转置)
    a = np.transpose(a)

    矩阵求逆
    ia = nlg.inv(a)

    矩阵特征值和特征向量
    eig_value, eig_vector = nlg.eig(a)

    矩阵块操作
    a = np.array((1,2,3))
    b = np.array((2,3,4))
    print np.column_stack((a,b))
    在循环处理某些数据得到结果后,将结果拼接成一个矩阵是十分有用的,可以通过vstack和hstack完成。

    缺失值在分析中也是信息的一种,NumPy提供nan作为缺失值的记录,通过isnan判定。nan_to_num可用来将nan替换成0。

    相关文章

      网友评论

        本文标题:NumPy

        本文链接:https://www.haomeiwen.com/subject/cqilfxtx.html