NumPy

NumPy,第1张

文章目录
      • NumPy基本属性
        • 1.fill、ndim、size演示
        • size返回数组所含元素的总个数
        • 2."="赋值和.copy
      • 索引和切片
        • 1.数组索引:从0开始
        • 2.数组切片
        • 3.索引数组
        • 4.布尔类型的索引

NumPy基本属性 1.fill、ndim、size演示
  • ndarray.fill将数组中的所有元素以指定的值填充

  • ndim返回数组的维数

  • size返回数组所含元素的总个数
  • import numpy as np
    array1 = np.array([1,2,3,4,5])
    array1.fill(0)
    print(array1)
    # 输出:[0 0 0 0 0]
    
    array2 = np.arange(10).reshape(2,5)
    #print(array2)
    print(array2.ndim)  # 2
    print(array2.size)  # 10
    
2."="赋值和.copy
  • "="可以将一个数组赋值给一个新的数组,也可以根据索引赋值新的元素

  • ".copy"用法:复制一个新的数组,不改变原来的数组

    x = np.array([[1,2,3],[4,5,6],[7,8,9]])
    y = x
    print(x)
    print(y)
    y[1,1] = 100  # 既改变了数组y,也改变了数组x
    print(x)
    
    #copy的用法:
    s = x.copy()
    s[1,1] = 1000 # 只改变了数组s,并未改变原数组x
    print(x)
    print(s)
    
索引和切片 1.数组索引:从0开始
  • 数组索引是指使用方括号([])来索引数组值。

  • 数组的索引与其他Python序列相同,都从0开始,并接受从数组末尾开始索引的负索引(最后一个元素索引为-1)

  • 与列表和元组不同的是,numpy数组支持多维数组的多维索引。

    import numpy as np
    array_x = np.arange(10)  # 注释为输出结果
    print(array_x)           # [0 1 2 3 4 5 6 7 8 9]
    print(array_x[0])        # 0
    print(array_x[2])        # 2
    print(array_x[-1])       # 9
    print(array_x[-2])       # 8
    
    # 多维数组的多维索引  
    x = array_x.reshape(2,5)  # x为二维数组,2行5列;不改变原数组array_x
    print(array_x)   # [0 1 2 3 4 5 6 7 8 9]
    print(x)
    '''输出结果:
    [[0 1 2 3 4]
     [5 6 7 8 9]]'''
    
    '''下面的输出结果也能得到一个shape为(2,3)的二维数组
    array_x.shape = (2,5) 
    print(array_x)
    '''
    print(x[1,3])   # 8
    print(x[1][3])  # 8
    print(x[1,-1])  # 9
    print(x[0])     # [0 1 2 3 4]
    print(x[1])     # [5 6 7 8 9]
    
2.数组切片
  • 可以对数组进行切片和跨步以提取具有相同数量的尺寸但具有与原始尺寸不同的数组。切片和跨步的工作方式与列表和元组的工作方式完全相同,只是数组切片可以应用于多个维度。

  • 数组切片不会复制内部数组数据,只会生成原始数据的新视图。

  • “:” 的意思为,取值从左往右,但不包括右

  • “:” 后面什么也不写表示取之后的所有值

    y = np.arange(10)
    print(y)         # [0 1 2 3 4 5 6 7 8 9]
    print(y[2:5])    # [2 3 4]
    print(y[:-7])    # [0 1 2]
    print(y[1:7:2])  # [1 3 5]注:y[1:7:2]表示取索引在区间[1,7)内,且步长为2的索引,即索引1,3,5
    print(y[-3:])    # [7 8 9]
    
    # 多维数组的切片
    x = np.arange(35).reshape(5,7)
    print(x)
    print(x[1:5:2,::3])  #1:5:2表示取索引为1,3的行,::3表示取索引为0,3,6的列
    '''输出结果:
    [[ 0  1  2  3  4  5  6]
     [ 7  8  9 10 11 12 13]
     [14 15 16 17 18 19 20]
     [21 22 23 24 25 26 27]
     [28 29 30 31 32 33 34]]
    [[ 7 10 13]
     [21 24 27]]'''
    
3.索引数组
  • NumPy数组可以使用其他数组(或任何其他可以转换为数组的类似序列的对象)作为索引。对于索引数组的所有情况,返回的是原始数据的副本,而不是切片获取的视图。

  • 索引数组必须是整数类型。数组中的每个值指示要使用的数组中的哪个值代替索引。

  • 允许使用负值

  • 索引值超出范围是错误的

  • 索引数组时返回的是与索引数组具有相同形状的数组

    x = np.arange(10,1,-1)
    s1 = np.array([3,3,1,8])
    s2 = np.array([3,3,-1,8])
    print(x)        # [10  9  8  7  6  5  4  3  2]
    print(x[s1])    # [7 7 9 2]
    print(x[s2])    # [7 7 2 2]
    #print(x[np.array[3,3,20,8]])   超出范围报错
    
    #索引数组时返回的是与索引数组具有相同形状的数组
    s = np.array([[1,1],[2,3]])
    print(x)     # [10  9  8  7  6  5  4  3  2]
    print(x[s])  
    '''
    [[9 9]
     [8 7]]'''
    

学习链接:https://www.numpy.org.cn/user/basics/indexing.html

4.布尔类型的索引
  • 在布尔类型中,0表示False,大于0表示True

  • 创建布尔类型的数组,dtype=bool

    grade = np.arange(0,100,10)  #假设这是一组成绩
    print(grade)  # [ 0 10 20 30 40 50 60 70 80 90]
    mask = np.array([0,0,0,0,0,0,1,1,1,1],dtype=bool) #将60分以上的选出来
    print(mask)   # [False False False False False False  True  True  True  True]
    print(grade[mask])  # [60 70 80 90]
    
    random_array = np.random.rand(10)
    print(random_array)
    mask = random_array > 0.5 #自动做判断,筛选出大于0.5的数字
    print(random_array[mask])
    '''输出结果如下:
    random_array:
    [0.04246453 0.86247479 0.49279673 0.26048207 0.56550633 0.17871151
     0.48849317 0.59024163 0.31977801 0.73402384]
    random_array[mask]:
    [0.86247479 0.56550633 0.59024163 0.73402384]'''
    
    numpy.random.rand():
        '''
        Numpy中的random.rand()主要用于返回一个或一组0到1之间的随机数或随机数组。
        numpy.random.rand(d1,d2,...)创建给定形状的数组,取值为[0,1)的随机数。
        1个参数表示一维数组,2个参数表示二维数组,3个参数表示三维数组...
        '''
    
  • 如果不使用T/F判断,则使用where函数进行索引,where函数会返回符合条件的元素的索引

    y = np.array([10,20,30,40,50])
    print(np.where(y>30))     # (array([3, 4], dtype=int64),)
    print(y[np.where(y>30)])  # [40 50]
    

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/867711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-12
下一篇 2022-05-12

发表评论

登录后才能评论

评论列表(0条)

保存