zoukankan      html  css  js  c++  java
  • Numpy Quickstart tutorial

      此文是关于Numpy的一些基本用法, 内容来源于Numpy官网:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

    1.The Basics

    1)导入numpy

    import numpy as np

    2)创建一个0--14的数组a, 并将其变为3行5列的二位数组

    a = np.arange(15).reshape(3, 5)
    a
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])

    3)查看a的形状

    a.shape
    (3, 5)

    4)查看a的维数

    a.ndim
    2

    5)查看a中元素的数据类型

    a.dtype
    dtype('int64')

    6)查看数组中每个元素的字节大小

    a.itemsize
    8

    7)查看数组a中所有元素的总个数

    a.size
    15

    8)查看a的类型, 结果显示a是一个numpy数组

    type(a)
    numpy.ndarray

    2.Array Creation

    1)可以把一个python列表直接转为numpy数组

    a = np.array([2,3,4])
    a
    array([2, 3, 4])

    一个常见的错误是不能直接把元素放入函数小括号内, 需要单独的一个中括号包含着这些元素。

    a = np.array(1,2,3,4)    # WRONG
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-15-90a21e8c09d8> in <module>()
    ----> 1 a = np.array(1,2,3,4)    # WRONG
    
    ValueError: only 2 non-keyword arguments accepted
    
    a = np.array([1,2,3,4])  # RIGHT
    a
    array([1, 2, 3, 4])

    2)创建元素为0的数组

    np.zeros( (3,4) )
    array([[ 0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])

    3)创建元素为1的数组

    np.ones( (2,3,4), dtype=np.int16 )
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)

    4)创建一个空数组

    np.empty( (2,3) ) 
    array([[ 0.,  0.,  0.],
           [ 0.,  0.,  0.]])

    5)设定区间, 并按照一定间隔创建数组

    np.arange( 10, 30, 5 )
    array([10, 15, 20, 25])
    
    np.arange( 0, 2, 0.3 )  
    array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

    6)在0到2之间均匀的生成9个数作为数组

    from numpy import pi
    np.linspace( 0, 2, 9 )
    array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])

    3.Basic Operations

    1)两个数组的元素相加减

    a = np.array( [20,30,40,50] )
    b = np.arange( 4 )
    b
    array([0, 1, 2, 3])
    
    c = a-b
    c
    array([20, 29, 38, 47])

    2)数组的2次幂

    b**2
    array([0, 1, 4, 9])
    
    10*np.sin(a)
    array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])

    3)对数组内元素与一常量比较大小, 返回一个布尔数组

    a<35
    array([ True,  True, False, False], dtype=bool)

    4)两个数组的元素间相乘

    A = np.array( [[1,1],[0,1]] )
    B = np.array( [[2,0],[3,4]] )
    A*B
    array([[2, 0],
           [0, 4]])

    5)两个数组矩阵点乘, 有两种方法, 得到的结果是相同的。

    A.dot(B)
    array([[5, 4],
           [3, 4]])
    
    np.dot(A, B)  
    array([[5, 4],
           [3, 4]])

    6)数组的求和、最大值、最小值

    a = np.random.random((2,3))
    a
    array([[ 0.76423426,  0.45623695,  0.65700409],
           [ 0.75365929,  0.13244614,  0.23917196]])
    
    a.sum(), a.max(), a.min()
    (3.0027526935349194, 0.76423426042527243, 0.13244614149075928)

    4.Indexing, Slicing and Iterating

    1)一维数组的索引与切片

    a = np.arange(10)**3
    a
    array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
    
    # a的第三个元素
    a[2]
    8
    
    # a的第三到第五个元素
    a[2:5]
    array([ 8, 27, 64])
    
    # a的从0到6个元素中, 索引能被2整除的都替换为-1000
    a[:6:2] = -1000
    a
    array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])
    # 将a反转
    a[ : :-1]
    array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])

    2)多维数组的索引与切片

    def f(x,y):
        return 10*x+y
    
    b = np.fromfunction(f,(5,4),dtype=int)
    b
    array([[ 0,  1,  2,  3],
           [10, 11, 12, 13],
           [20, 21, 22, 23],
           [30, 31, 32, 33],
           [40, 41, 42, 43]])
    
    b[2,3]
    23
    
    b[0:5, 1]
    array([ 1, 11, 21, 31, 41])
    b[-1] 
    array([40, 41, 42, 43])
    # 将数组展开
    b.flatten()、
    array([ 0,  1,  2,  3, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31, 32, 33, 40, 41, 42, 43])

    3)数组拼接

    a = np.floor(10*np.random.random((2,2)))
    b = np.floor(10*np.random.random((2,2)))
    a
    array([[ 4.,  7.],
           [ 9.,  2.]])
    
    b
    array([[ 8.,  1.],
           [ 9.,  5.]])
    
    # 竖向拼接
    np.vstack((a,b))
    array([[ 4.,  7.],
           [ 9.,  2.],
           [ 8.,  1.],
           [ 9.,  5.]])
    
    # 横向拼接
    np.hstack((a,b))
    array([[ 4.,  7.,  8.,  1.],
           [ 9.,  2.,  9.,  5.]])
    # 横向拼接
    np.column_stack((a,b))
    array([[ 4.,  7.,  8.,  1.],
           [ 9.,  2.,  9.,  5.]])

    4) 将数组分成几个小数组

    a = np.floor(10*np.random.random((2,12)))
    a
    array([[ 2.,  3.,  2.,  4.,  2.,  1.,  5.,  4.,  4.,  2.,  0.,  3.],
           [ 9.,  2.,  0.,  2.,  8.,  3.,  6.,  2.,  7.,  2.,  2.,  6.]])
    
    np.hsplit(a,3)   # Split a into 3
    [array([[ 2.,  3.,  2.,  4.],
            [ 9.,  2.,  0.,  2.]]), array([[ 2.,  1.,  5.,  4.],
            [ 8.,  3.,  6.,  2.]]), array([[ 4.,  2.,  0.,  3.],
            [ 7.,  2.,  2.,  6.]])]
    
    np.hsplit(a,(3,4))   # Split a after the third and the fourth column
    [array([[ 2.,  3.,  2.],
            [ 9.,  2.,  0.]]), array([[ 4.],
            [ 2.]]), array([[ 2.,  1.,  5.,  4.,  4.,  2.,  0.,  3.],
            [ 8.,  3.,  6.,  2.,  7.,  2.,  2.,  6.]])]
  • 相关阅读:
    C Primer Plus_第三章_数据和C_复习题与编程练习
    如何确定你的编程环境下不同数据类型数据的储值范围
    vs2010调试程序出现“Cannot find or open the PDB file”
    C Primer Plus_第二章_C语言概述_复习题与编程练习
    C Primer Plus_第一章_概览_复习题与编程练习
    [au3]复制选择性粘贴文本到excel
    subversion
    Centos7.0安装配置PHP7.0
    C#的UDP服务器
    CentOS7搭建NAS,包括NFS、ISCSI
  • 原文地址:https://www.cnblogs.com/Fosen/p/8259893.html
Copyright © 2011-2022 走看看