numpy练习

原博客地址:https://github.com/rougier/numpy-100/blob/master/100_Numpy_exercises.md

numpy100道练习题

原题目可以在此处找到,链接:https://github.com/rougier/numpy-100/blob/master/100_Numpy_exercises.md

本文只摘选了一部分习题进行讲解,题号和原题号对应。

  1. 创建一个三乘三乘三的随机矩阵/Create a 3x3x3 array with random values (★☆☆)
    很多场景需要随机值,用来测定方法或者模拟实际。numpy.random模块给出了这样功能。
import numpy as np
Z = np.random.random((3,3,3))
print(Z)

   
   
    1. Create a 10x10 array with random values and find the minimum and maximum values (★☆☆) 创建10*10的随机值矩阵,并找出最大值和最小值
    import numpy as np
    Z = np.random.random((10,10))
    Zmin, Zmax = Z.min(), Z.max()
    print(Zmin, Zmax)
    
       
       
      1. Create a random vector of size 30 and find the mean value (★☆☆)创建一个长度为30的矢量,并找出均值
      import numpy as np
      Z = np.random.random(30)
      m = Z.mean()
      print(m)
      
         
         
        1. 创建一个中心是边界值为1而内部都是0的数组/Create a 2d array with 1 on the border and 0 inside (★☆☆)
          本题再次用到numpy的切片原理。多维数组同样遵循x[start:stop:step]的原理。解此题可以先把所有值都设置为1,这是大正方形;其次,把边界除外小正方形全部设置为0,本题就解决了。

        方法一:

        import numpy as np
        Z = np.ones((10, 10))
        Z[1:-1, 1:-1] = 0
        print(Z)
        
           
           

          方法二:

          import numpy as np
          Z = np.ones((10, 10))
          Z[1:9, 1:9] = 0
          print(Z)
          
             
             

            方法三:

            import numpy as np
            Z = np.zeros((5, 5))
            Z = np.pad(Z, pad_width=1, mode='constant', constant_values=1)
            print(Z)
            
               
               
              1. How to add a border (filled with 0’s) around an existing array? (★☆☆)
                把存在的矩阵,加上数值为0的边界把存在的矩阵,加上数值为0的边界
              Z = np.ones((5,5))
              Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
              print(Z)
              
                 
                 
                1. Create a 5x5 matrix with values 1,2,3,4 just below the diagonal (★☆☆)
                  在对角线下方创建一个值为1,2,3,4的5x5矩阵在对角线下方创建一个值为1,2,3,4的5x5矩阵
                import numpy as np
                Z = np.diag(1+np.arange(4), k=1)  #k为偏移量,k=-1,表示斜对角线的下方,k=1,表示斜对角线的上方,k=0,无偏移
                print(Z)
                
                   
                   
                  1. 创建一个8×8的棋盘格Create a 8×8 matrix and fill it with a checkerboard pattern (★☆☆)

                  棋盘格是交错的数值。实际还是用到多维数组的切片原理。在多维数组的切片中,a(m,n),a[start:stop:step,start:stop:step],两个参数分别是行列限制。分三个步骤,第一设置一个8*8的空值,第二步把第一行隔一列设置1,每两行两列同样,第三步类似第二部,不过是从第二行开始,错开。

                  import numpy as np
                  Z = np.zeros((8, 8), dtype=int)
                  Z[1::2, ::2] = 1
                  Z[::2, 1::2] = 1
                  print(Z)
                  

                    1. 使用tile功能创建一个棋盘格/Create a checkerboard 8×8 matrix using the tile function (★☆☆)
                      np.tile(A, reps)解释为Construct an array by repeating A the number of times given by reps。这个功能是矩阵复制构造,其中reps可以是矩阵。从解题思路上看,只要构造一个1,0,0,1的二乘二的矩阵,再进行四次行列的复制。
                    import numpy as np
                    Z = np.tile( np.array([[0,1],[1,0]]), (4,4))
                    print(Z)
                    
                     
                     
                      1. 归一化一个随机的5*5矩阵/Normalize a 5×5 random matrix (★☆☆)

                      找出最大值和最小值,然后把最大值和最小值分别用1和0表示,其他值则反映在0和1中间。

                      import numpy as np
                      Z = np.random.random((5, 5))
                      Zmax, Zmin = Z.max(), Z.min()
                      Z = (Z - Zmin)/(Zmax - Zmin)
                      print(Z)
                      
                       
                       
                        1. Create a custom dtype that describes a color as four unsigned bytes (RGBA) (★☆☆)
                          创建一个自定义dtype,将颜色描述为四个无符号字节(RGBA)创建一个自定义dtype,将颜色描述为四个无符号字节(RGBA)
                        import numpy as np
                        color = np.dtype([("r", np.ubyte, 1),  # dtype结构化数据类型
                                          ("g", np.ubyte, 1),
                                          ("b", np.ubyte, 1),
                                          ("a", np.ubyte, 1)])
                        print(color)
                        
                         
                         
                          1. Multiply a 5x3 matrix by a 3x2 matrix (real matrix product) (★☆☆)
                            5乘3的矩阵和3乘2的实矩阵相乘。 5乘3的矩阵和3乘2的实矩阵相乘。
                          import numpy as np
                          Z = np.dot(np.ones((5, 3)), np.ones((3, 2)))  # ones((5,3)),里面的括号容易忘
                          print(Z)
                          
                           
                           
                            1. Given a 1D array, negate all elements which are between 3 and 8, in place. (★☆☆)
                              给定一维数组,所有在3到8之间的元素取负数。给定一维数组,所有在3到8之间的元素取负数。
                            import numpy as np
                            Z = np.arange(11)
                            Z[(3 < Z) & (Z < 8)] *= -1
                            print(Z)
                            
                             
                             
                              评论
                              添加红包

                              请填写红包祝福语或标题

                              红包个数最小为10个

                              红包金额最低5元

                              当前余额3.43前往充值 >
                              需支付:10.00
                              成就一亿技术人!
                              领取后你会自动成为博主和红包主的粉丝 规则
                              hope_wisdom
                              发出的红包
                              实付
                              使用余额支付
                              点击重新获取
                              扫码支付
                              钱包余额 0

                              抵扣说明:

                              1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                              2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                              余额充值