zoukankan      html  css  js  c++  java
  • numpy使用指南

    numpy.array

    numpy.array是numpy中用于处理n阶数组的对象,是其类族中的重要基类。

    numpy.array可以表示任意维的数组,可以使用构造函数初始化:

    arr = numpy.array( [ [1,2], [3,4] ] )
    

    上述数组可以由arange和reshape得到:

     arr = arange(1,5).reshape(2,2)
    

    numpy.array包含的重要属性:

    • ndim

    数组的维数,在线性代数中称为秩。

    • shape

    一个指示数组在每个维度上大小的整数元组

    • size

    数组元素的总个数,等于shape属性中元组元素的乘积。

    • dtype

    一个用来描述数组中元素类型的对象,可以使用Python标准类型,numpy类型以及自定义类型。

    • itemsize

    数组中每个元素的字节大小

    • data

    包含实际数组元素的缓冲区,通常使用索引来使用数组中的元素所以不需要使用这个属性。

    切片,迭代

    numpy.array支持Python中的索引与切片操作,允许使用负索引。可以使用数组的切片访问原数组。

    且提供了arr[x,y,..]式的索引操作,并保留了对Python内置arr[x][y]式索引的支持。

    如果对高维数组只使用低维索引将其看作低一维的数组的列表进行索引。

    对高维数组的迭代,是将其看作低一维的数组在最左侧轴上的迭代。

    >>> arr = arange(1,5).reshape(2,2)
    >>> arr[0,1]
    2
    >>> arr[0][1]
    2
    >>> arr[1]
    array([3, 4])
    >>> for i in arr:
    ...   print(i)
    ...
    [1 2]
    [3 4]
    

    改变数组形状

    • ravel

    将数组展开为一维,采用"C风格"的展开,最右侧的索引最先变化

    • reshape

    改变数组各维的形状,接受各维长度作为参数。如上文示例:

    arr = arange(1,5).reshape(2,2)
    

    arange(1,5)生成[1,5)中整数组成的序列:array([1,2,3,4]);reshape(2,2)将其重置为2*2的数组array([[1,2],[3,4]])。

    • resize

    resize与reshape接受同样的参数,并改变数组各维的形状。

    但是resize修改原对象,不返回对象,reshape返回修改后的对象,原对象不变。

    >>> arr = arange(1,5)
    >>> arr
    array([1, 2, 3, 4])
    >>> arr2= arr.reshape(2,2)
    >>> arr2
    array([[1, 2],
           [3, 4]])
    >>> arr
    array([1, 2, 3, 4])
    >>> arr3 = arr.resize(2,2)
    >>> arr
    array([[1, 2],
           [3, 4]])
    >>> arr3
    

    复制与视图

    复制引用

    在引用之间相互赋值只是使得多个引用指向同一对象,内存中的对象不复制。这与Python内存对象是一致的。

    >>> a = arange(12)
    >>> b = a           
    >>> b is a          
    True
    

    视图与浅拷贝

    视图用于不同的数组对象分享同一个数据。

    视图方法创造一个新的数组对象指向同一数据:

    >>> arr = arange(1,5)
    >>> v = arr.view()
    >>> v
    array([[1, 2],
           [3, 4]])
    >>> arr[0,0] = 6
    >>> v
    array([[6, 2],
           [3, 4]])
    

    数组切片同样是创建了视图。

    深拷贝

    >>> arr = arange(1,5)
    >>> c = arr.copy()
    >>> arr[0] = 6
    >>> c
    array([1, 2, 3, 4])
    

    在内存中创建新的对象。

    matrix类

    [待完成]

    通用函数

    numpy.array的运算符仍为对应元素之间的算术运算,矩阵的拼接与线性代数运算需要使用通用函数来完成。

    矩阵拼接

    • vstack(a,b) 纵向拼接

    • hstack(a,b) 横向拼接

    线性代数运算

    • transpose(a) / a.transpose()

    矩阵转置

    • dot(a,b)

    向量内积

    • cross(a,b)

    向量外积

    • inv(a)

    矩阵求逆

    • det(a)

    求行列式

    • trace(a)

    求迹(主对角线元素和)

    • solve

    求线性方程组特解

    >>> a = array([[3, 1, -2], [1, -1, 4], [2, 0, 3]])
    >>> b = array([5, -2, 2.5])
    >>> x = solve(a, b)
    >>> x
    array([ 0.5,  4.5,  0.5])
    
    • numpy.linalg.matrix_rank(a)

    矩阵求秩,线性代数意义上的秩,而非numpy定义的所谓"秩"。

    >>> numpy.linalg.matrix_rank(a)
    3
    
    • svd

    svd分解函数(奇异值分解)可用来求线性方程组通解:

    >>> a = array([[2, -2, -4], [-1, 3, 4], [1, -2, -3]])
    >>> s, v, d = linalg.svd(a)
    >>> compress(v < 1e-10, d, axis=0)
    array([[-0.57735027,  0.57735027, -0.57735027]])
    

    更多numpy常用方法请参见numpy doc routines

    numpy的官方文档非(sha)常(yong)好(mei)用(you),可以考虑看下面的参考资料:

    python线性代数

  • 相关阅读:
    [转]拓扑排序
    [转]C++ string学习
    二叉树的前序遍历
    My Solution to Lowest Common Ancestor of a Binary Tree Part I(TopDown Approach)
    求二叉树节点总数
    二叉树的中序遍历
    轻松搞定面试中的二叉树题目
    VS2005 CrystalReport开发Web应用
    ASP.NET 2.0移动开发入门之使用模拟器
    [原创]Ajax UpLoadFile 多个大文件上传控件,已更新。
  • 原文地址:https://www.cnblogs.com/Finley/p/5302841.html
Copyright © 2011-2022 走看看