zoukankan      html  css  js  c++  java
  • 读书笔记3数组的一些常用函数

    一、产生一些常用数组

    ones((m,n),dtype),zeros((m,n),dtype),empty((m,n),dtype),eye(n),random.randn(m,n)

    x = ones((M,N), dtype=’int32’) # 32-bit integers

    print np.ones((2,3)),'
    '
    print np.zeros((2,3)),'
    ';
    print np.empty((2,3)),'
    '
    print np.eye(4)
    
    
    [[ 1.  1.  1.]
     [ 1.  1.  1.]] 
    
    [[ 0.  0.  0.]
     [ 0.  0.  0.]] 
    
    [[ 0.  0.  0.]
     [ 0.  0.  0.]] 
    
    [[ 1.  0.  0.  0.]
     [ 0.  1.  0.  0.]
     [ 0.  0.  1.  0.]
     [ 0.  0.  0.  1.]]

    二、类型转换

    asarray#讲矩阵转换成数组形式

    asmatrix#将数组转换成矩阵形式

    2、矩阵的逆和矩阵的秩

    A.I#求的是矩阵的逆

    np.linalg.det(A)#求的是数组的秩

    3、size(A)返回数组元素总数

    4、random.randn(m,n)产生随机数组

    5、tile(A,(m,n))用A来填充成m*n个A组成的数组,

    a=np.reshape(np.arange(10),(2,5))
    print a
    b=np.tile(a,(3,2))
    print b
    ​
    [[0 1 2 3 4]
     [5 6 7 8 9]]
    [[
    0 1 2 3 4 0 1 2 3 4] [5 6 7 8 9 5 6 7 8 9] [0 1 2 3 4 0 1 2 3 4] [5 6 7 8 9 5 6 7 8 9] [0 1 2 3 4 0 1 2 3 4] [5 6 7 8 9 5 6 7 8 9]]

    6、ravel(A)将原始数组或矩阵返回成一维的数组形式,只是更改了视图,并没有复制数据

    a=np.mat(np.ones((2,3)))
    c= np.ravel(a)
    b=np.ones((2,3));
    d= np.ravel(b)
    print type(c)
    print type(d)
    print c.shape
    print d.shape
    
    <type 'numpy.ndarray'>
    <type 'numpy.ndarray'>
    (6L,)
    (6L,)

    7、flatten和ravel类似的功能,只不过flatten是通过复制数组的,而且不会改变数组或矩阵类型

    a=np.mat(np.ones((2,3)))
    c=np.ndarray.flatten(a)
    ​
    print a
    print c
    c=np.ravel(c)
    c[3]=20
    print a
    print c
    [[ 1.  1.  1.]
     [ 1.  1.  1.]]
    [[ 1.  1.  1.  1.  1.  1.]]
    [[ 1.  1.  1.]
     [ 1.  1.  1.]]
    [  1.   1.   1.  20.   1.   1.]

    8、分割split, vsplit(A,t), hsplit。返回的是一个各个片段组成的列表

    如果t是一个数,则均匀分成t份,如果t是一个矢量,则将分成几段

    例如[2,5,8]则分成,[:2],[2:5],[5:8],[8:]

    9、删除数据delete(x,[],axis)如果axis没有,则相当于在一个一位数组中删除后边列表里的数据,如果axis有数据,则在相应的坐标轴上删除行或列

    axis=0表示在行上删除,axis=1表示在列上删除

    >>> x = reshape(arange(20),(4,5))
    >>> delete(x,1,0) # Same as x[[0,2,3]]
    array([[ 0, 1, 2, 3, 4],
    [10, 11, 12, 13, 14],
    [15, 16, 17, 18, 19]])
    >>> delete(x,[2,3],1) # Same as x[:,[0,1,4]]
    array([[ 0, 1, 4],
    [ 5, 6, 9],
    [10, 11, 14],
    [15, 16, 19]])
    >>> delete(x,[2,3]) # Same as hstack((x.flat[:2],x.flat[4:]))
    array([ 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
    19])

    10、squeeze 移除没有数据的多余维
    >>> x = ones((5,1,5,1))
    >>> shape(x)
    (5L, 1L, 5L, 1L)
    >>> y = x.squeeze()
    >>> shape(y)
    (5L, 5L)
    >>> y = squeeze(x)

    11、fliplr, flipud数组翻转

    >>> x = reshape(arange(4),(2,2))
    >>> x
    array([[0, 1],
    [2, 3]])
    >>> fliplr(x)
    array([[1, 0],
    [3, 2]])
    >>> flipud(x)
    array([[2, 3],
    [0, 1]])

    12、diag会根据输入的不同而不同,

    >>> x = reshape(arange(4),(2,2))
    >>> x
    array([[0, 1],
    [2, 3]])
    >>> fliplr(x)
    array([[1, 0],
    [3, 2]])
    >>> flipud(x)
    array([[2, 3],
    [0, 1]])

    13、cumsum在指定坐标轴上计算累积和

    a=np.arange(1,11)
    print a
    np.cumsum(a)
    [ 1  2  3  4  5  6  7  8  9 10]
    Out[24]:
    array([ 1,  3,  6, 10, 15, 21, 28, 36, 45, 55])

    三、线性代数运算

    1、solve(A,y),解线性方程组Ax=y,A是可逆的,则x=inv(A)y

    >>> X = array([[1.0,2.0,3.0],[3.0,3.0,4.0],[1.0,1.0,4.0]])
    >>> y = array([[1.0],[2.0],[3.0]])
    >>> solve(X,y)
    array([[ 0.625],
    [-1.125],
    [ 0.875]])

    2、最小二乘法lstsq(X,y),解线性方程组Ax= ,A是n*k矩阵,n>k,

    第一个是x,第二个是残差,第三个是the rank of X ,第四个是contains the singular values of

    >>> X = randn(100,2)
    >>> y = randn(100)
    >>> lstsq(X,y)
    (array([ 0.03414346, 0.02881763]),
    array([ 3.59331858]),
    2,
    array([ 3.045516 , 1.99327863]))array([[ 0.625],
    [-1.125],
    [ 0.875]])

    3、计算数组行列式

    np.linalg.det(A)

    4/、特征值m,n=np.linalg.eig(A),m是特征值,n是特征向量,作为元组返回

    >>> x = matrix([[1,.5],[.5,1]])
    >>> val,vec = eig(x)
    >>> vec*diag(val)*vec.T
    matrix([[ 1. , 0.5],
    [ 0.5, 1. ]])

    5、矩阵的逆np.linalg.inv(A),在python中计算可能没有那么的精确,所以如果仅是判断是不是逆矩阵,可以使用np.allclose方法

    a=np.array([[1,2],[3,4]])
    b=np.linalg.inv(a);
    c=np.dot(a,b)
    print c
    print np.allclose(c,np.eye(2))
    [[
    1.00000000e+00 1.11022302e-16] [ 0.00000000e+00 1.00000000e+00]] True

    6、计算张量积z = np.kron(x,y)

    7、迹np.trace(A)

    8/matrix_rank computes the rank of an array using a SVD.

    x = np.array([[1,.5],[1,.5]])
    np.linalg.matrix_rank(x)
    Out[2]:
    1
  • 相关阅读:
    MSBI
    Jsoncpp 使用方法大全
    Jsoncpp的使用
    istringstream、ostringstream、stringstream 类介绍 和 stringstream类 clear函数的真正用途
    使用 GDB 调试多进程程序
    操作系统标识宏
    gdb调试多线程程序总结
    boost 1.56.0 编译及使用
    c++ bind1st 和 bind2nd的用法
    纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/5402577.html
Copyright © 2011-2022 走看看