zoukankan      html  css  js  c++  java
  • Numpy开坑(1)

    我是对着numpy中文文档直接啃的,这系列博客主要是作为自己的学习笔记来写的,可能大家看起来结构没那么清晰,请谅解。

    1. numpy中的数组
    • 快速定义一维数组
    import numpy as np
    array = np.array([1,2,3])
    print(type(array))
    >>> <class 'numpy.ndarray'>
    print(array)
    >>> [1 2 3]
    print(array.shape)
    >>>(3,)   #说明是包含三个元素的数组
    
    • 创建长度为五的元素全部为0的数组
    # 注意是两个括号,实际上是创建了一个5*1的矩阵
    new_array = np.zeros((5))
    
    • 创建随机[0,1)数字的4*4矩阵
    array = np.random.random((4,4))
    print(array)
    
    • 从多维数组提取一列/行
    array = np.array([[1,2,3],[1,2,3]])
    print(array[:,2])
    >>> [3 3]
    
    1. numpy中的数组计算操作
    • 相加
    a = np.array([[1.0, 2.0], [3.0, 4.0]]) 
    b = np.array([[5.0, 6.0], [7.0, 8.0]]) 
    print(a+b)
    >>>[[ 6.  8.]
     	[10. 12.]]
    
    • 相乘(对应位置相称,不是我一开始理解的矩阵相称)
    a = np.array([[1.0, 2.0], [3.0, 4.0]]) 
    b = np.array([[5.0, 6.0], [7.0, 8.0]]) 
    print(a*b)
    
    • 矩阵乘法(使用numpy数组的dot方法)
    a = np.array([[1.0, 2.0], [3.0, 4.0]]) 
    b = np.array([[5.0, 6.0], [7.0, 8.0]]) 
    print(a.dot(b))
    >>>[[19. 22.]
    	 [43. 50.]]
    

    最简单的用法完毕

    下面是稍微不最简单的用法

    • 创建二维数组,这里基本上创建的可以理解为一个矩阵
    a = np.array([[11, 12, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28 ,29, 30],
                  [31, 32, 33, 34, 35]])
    
    print(a[2,4])
    
    • 二维数组切片
    a = np.array([[11, 12, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25],
                  [26, 27, 28 ,29, 30],
                  [31, 32, 33, 34, 35]])
    print(a[0,1:3]) #第0行第1到第2个元素
    print(a[:,2:4])	#每一列的第2到第3个元素
    print(a.ndim) #数组的维度
    
    • 一维数组变二维
    a = np.arange(25)  #创建元素从0 到 24 的一维数组
    a = a.reshape((5, 5))	#将一维数组变成5*5的数组
    # print(a)
    b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45,
                  4, 92, 5, 55, 63, 43, 35, 6, 53, 24,
                  56, 3, 56, 44, 78])
    b = b.reshape((5,5))
    print(a > b)  #返回逐一比较的的布尔值
    
    • 一些函数操作
    a = np.arange(25)
    a.reshape((5,5))
    print(a.sum())
    print(a.max())
    print(a.cumsum())
    
    • 索引进阶
    a = np.arange(0,100,10)
    print(a)
    k = [1, 5, -1]
    b = a[k]
    print(b) >>> [10, 50, 90] # 返回的是第一个,第五个,最后一个
    
    • 突然回过来复习 reshape(), reshape是有一个返回值的,并不是直接将数组变成(n,n)的数组,需要先接收返回的变形数组,然后操作,然后注意用的是()

    • 因为多维数组越界造成的越界报错

    a = np.arange(0,100,10)
    print(a[:,1])
    # 这样就会报错too many indices for array
    
    • 布尔屏蔽的使用
    import matplotlib.pyplot as plt
    import numpy as np
    
    #这里相当于设置了一个定义域
    a = np.linspace(0, 2 * np.pi, 50)
    #将定义域传入函数
    b = np.cos(a)
    print(len(b))   
    plt.plot(a,b)
    mask = b >= 0
    plt.plot(a[mask], b[mask], 'bo')
    mask = (b >= 0) & (a <= np.pi / 2)
    plt.plot(a[mask], b[mask], 'go')
    plt.show()
    

    上面的示例显示了如何进行布尔屏蔽。你所要做的就是将数组传递给涉及数组的条件,它将为你提供一个值的数组,为该条件返回true。
    我们利用这些条件来选择图上的不同点。蓝色点(在图中还包括绿点,但绿点掩盖了蓝色点),显示值大于0的所有点。绿色点表示值大于0且小于一半π的所有点。

    • 不完全索引
    import numpy as np
    
    a = np.arange(0, 100, 10)
    b = a[:5]
    c = a[a >= 50]
    print(b) # >>>[ 0 10 20 30 40]
    print(c) # >>>[50 60 70 80 90]
    
    • where()函数获取下标
    a = np/arange(0,100,10)
    b = np.where(a > 20)
    print(b[0]) >>>[3 4 5 6 7 8 9]
    

    这里差不多是numpy所有基础用法了

  • 相关阅读:
    十一招解决:系统IE部分网页打不开怎么办(转载)
    基于阿里云server搭建SVNserver
    hdu 2825 Wireless Password(ac自己主动机&amp;dp)
    压力单位MPa、Psi和bar之间换算公式
    hdu4506小明系列故事——师兄帮帮忙 (用二进制,大数高速取余)
    图像处理之霍夫变换(直线检測算法)
    hdu1171 Big Event in HDU 01-背包
    [视频] x264 压缩笔记
    UVALive 4043 Ants
    关于游戏手柄按键的设计
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072626.html
Copyright © 2011-2022 走看看