zoukankan      html  css  js  c++  java
  • Python笔记6----数组

    1、Python 中的数组

    形式:

    • 用list和tuple等数据结构表示数组

      一维数组:list=[1,2,3,4]

      二维数组:list=[[1,2,3],[4,5,6],[7,8,9]]

    • 用array模块:array模块需要加载,而且运用的较少

      通过array函数创建数组(数组中的元素可以不是同一种类型),array.array('B',range(5))   >>array('B',[1,2,3,4,5])

      提供append、insert和read等函数

    标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。

    此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。

    NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

    (来自链接http://old.sebug.net/paper/books/scipydoc/numpy_intro.html)

    2、ndarray

    ndarray是Numpy中的基本数据结构,所有元素是同一种类型,优点:节省内存和提高CPU计算时间,有丰富的函数。

    0:作用对象是index; 1:作用对象是columns。

    (1)数组的创建:

    import numpy as np

    ①array函数创建:x=np.array([(1,2,3),(4,5,6)])

        创建一维数组:np.array([元素1,元素2,……])

        创建二维数组:np.array ( [ [ 元素1,元素2……] , [ 元素1,元素2,…… ] ,[ ] , [ ] ] )

    ②arange:           x=np.arange(1,5,0.5)      >>array([1.,1.5,2.,2.5,3.,3.5,4.,4.5])

    ③random:          x=np.random.random((2,2))   >>array([[0.7999243,0.3454323].[0.3546543,0.4634535]])

    ④linspace:         x=np.linspace(1,2,5,endpoint=False)   >>array([1.,1.2,1.4,1.6,1.8])

    ⑤ones:              x=np.ones([2,3])   >>array([[1.,1.,1.],[1.,1.,1.]])

    ⑥zeros:             x=np.zeros((2,2))  >>array([[0.,0.],[0.,0.]])

    ⑦fromfunction:  x=np.fromfunction(lamda i,j:(i+1)*(j+1),(9,9))

    结果为9*9乘法表。array([[1,2,3,4,5,6,7,8,9],              

                                            [2,4,6,8,10,12,14,16,18],

                                            [3,6,9……]

                                            ……

                                            [9,18,……,81]])

    (2)数组的操作:

    ①array[1]   :选择第二行所有元素

       array[0:2]:选择从第一行到第二行的所有元素(索引2不包括,即第三行)

       array[:,[0,1]]:选择所有行的第一列和第二列的元素

       array[1,[0,1]]:选择第二行第1列和第2列的元素

    ②shape:数组的维数,shape[0]取行数,shape[1]取列数。

    ③size:元素总个数

    ④reshape():改变数组的大小。但是原数组不变,即aArray不变,变化结果在bArray

        aArray=np.array([[1,2,3],[4,5,6]])   bArray=aArray.reshape(1,6)

        >> aArray=array([[1,2,3],[4,5,6]])  

        >> bArray=array([[1,2,3,4,5,6]])

    ⑤resize():改变数组的大小。原数组改变了,即aArray变了

        aArray.resize(1,6)

        >> aArray= array([[1,2,3,4,5,6]])

    ⑥vstack():垂直方向拼接。

          cArray=np.array([[7,8,9]])

          np.vstack((aArray,cArray))

          >>array([[1,2,3],

                         [4,5,6],

                         [7,8,9]])

    ⑦hstack():水平方向拼接。

        np.hstack((aArray,cArray))

       >> array([[1,2,3,4,5,6,7,8,9]])

    ⑧+:(两个大小不同的数组相加,是一种广播的思想)

        aArray+cArray   >>array([[8,10,12],[11,13,15]])

    ⑨sort(): 排序 ,一维数组x排序,x.sort()

        二维数组y=([[3,1,2],[6,3,1]])排序是对每一行进行排序,y.sort(),结果为y=([[1,2,3],[1,3,6]])

    统计运算:

    ①sum():所有元素的求和,aArray.sum()

    ②sum(axis=0):列求和

    ③min():所有元素最小值,aArray.min()

    ④argmax():返回最大值的索引

    ⑤mean():所有元素的均值

    ⑥var():方差

    ⑦std():标准差

    线性代数:np.linalg模块中的函数

    ①np.linalg.det(x):行列式

    ②np.linalg.inv(x):逆矩阵

    ③np.dot(x,x):x的内积

    ④np.linalg.solve():多元一次方程组求根

    ⑤np.linalg.eig():求特征值和特征向量

    ufunc函数:

    同样的计算numpy的通用计算比math计算的要快。

    Vectorize函数:对numpy数组中的每一个元素应用一个函数。
    a = np.array([[[1, 2], [1]],
                  [[2, 3, 3], [3, 4]]
                  ])
    print(a.shape)
    count_fun = np.vectorize(lambda x: len(x))
    print(count_fun(a))
  • 相关阅读:
    docker学习数据卷挂载方式
    接口自动化CIJenkins
    linux安装docker
    docker学习容器备份
    Python实现简易的ORM模型
    Python队列
    selenium实现绕过登录
    docker学习镜像常用操作命令
    docker学习容器常用命令
    把握趋势,成为赢家
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/8625402.html
Copyright © 2011-2022 走看看