zoukankan      html  css  js  c++  java
  • python 常用技巧 — 数组 (array)

    目录:

    1. 数组每一行除以这一行的总数(numpy divide row by row sum)

    2. 数组每一行或者每一列求平均 (python average array columns or rows)

    3. 数组每一行或者每一列求加权平均 (python weight average array columns or rows)

    4. 计算数组得到每一行或者每一列的和 (python sum columns of an array)

    5. 生成指定维度的随机矩阵 (python generate random array)

    6. 数组中对元素进行布尔类型判断 (python check elements in array with Boolean type)

    7. 数组中是否存在满足条件的数 (python check if exsit element in array satisfies a condition)

    8. 数组中所有元素是否有0元素 (python check whether all elements in numpy is zero)

    9. 数组找到满足一个条件或多个的数据(python numpy find data that satisfty one or multiple conditions)

    10. 数组中所有元素相乘(python numpy multiple every element in an array)

    内容:

    1. 数组每一行除以这一行的总数(numpy divide row by row sum)

    https://stackoverflow.com/questions/16202348/numpy-divide-row-by-row-sum

    方法1:

    >>> e
    array([[ 0.,  1.],
           [ 2.,  4.],
           [ 1.,  5.]])
    >>> e/e.sum(axis=1)[:,None]
    array([[ 0.        ,  1.        ],
           [ 0.33333333,  0.66666667],
           [ 0.16666667,  0.83333333]])

    方法2:

    >>> (e.T/e.sum(axis=1)).T
    array([[ 0.        ,  1.        ],
           [ 0.33333333,  0.66666667],
           [ 0.16666667,  0.83333333]])

    方法3:

    >>> e/e.sum(axis=1, keepdims=True)
    array([[ 0.        ,  1.        ],
           [ 0.33333333,  0.66666667],
           [ 0.16666667,  0.83333333]])
    

     

    2. 数组每一行或者每一列求平均 (python average array columns or rows)

    import numpy as np
    In [50]: a=np.arange(1,13).reshape(3,4)
    In [51]: a
    Out[51]: 
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12]])
    In [52]: np.average(a, axis=1)
    Out[52]: array([ 2.5,  6.5, 10.5])
    In [53]: np.average(a, axis=0)
    Out[53]: array([5., 6., 7., 8.])
    

    3. 数组每一行或者每一列求加权平均 (python weight average array columns or rows)

    https://docs.scipy.org/doc/numpy/reference/generated/numpy.average.html

    >>> data = np.arange(6).reshape((3,2))
    >>> data
    array([[0, 1],
           [2, 3],
           [4, 5]])
    >>> np.average(data, axis=1, weights=[1./4, 3./4])
    array([0.75, 2.75, 4.75])
    

      

    4. 计算数组得到每一行或者每一列的和 (python sum columns of an array)

    https://stackoverflow.com/questions/13567345/how-to-calculate-the-sum-of-all-columns-of-a-2d-numpy-array-efficiently

    >>> import numpy as np
    >>> a = np.arange(12).reshape(4,3)
    >>> a.sum(axis=0)
    array([18, 22, 26])
    >>> a.sum(axis=1)
    array([ 3, 12, 21, 30])

    5. 生成指定维度的随机矩阵 (python generate random array)

    https://www.codespeedy.com/how-to-create-matrix-of-random-numbers-in-python-numpy/

    (1)生成指定维度的小数数组

    In [1]: import numpy as np
    
    In [2]: a=np.random.rand(3,4)
    
    In [3]: a
    Out[3]: 
    array([[0.03403289, 0.31416715, 0.42700029, 0.49101901],
           [0.70750959, 0.4852401 , 0.11448147, 0.21570702],
           [0.87512839, 0.82521751, 0.56915875, 0.67623931]])
    

    (2)生成只能维度的整数数组

    In [8]: np.random.randint(1,10,size=(3,4))
    Out[8]: 
    array([[8, 1, 4, 3],
           [7, 1, 8, 7],
           [2, 5, 4, 3]])
    

     

    6. 数组中对元素进行布尔类型判断 (python check elements in array with Boolean type)

    https://docs.scipy.org/doc/numpy/reference/generated/numpy.all.html

    https://docs.scipy.org/doc/numpy/reference/generated/numpy.any.html

    >>> np.all([-1, 4, 5]) 
    True
    
    >>> np.all([[True,False],[True,True]])
    False
    
    >>> np.all([[True,False],[True,True]], axis=0)
    array([ True, False])
    
    // 如果要判断至少存在一个元素则使用
    
    >>> np.any([-1, 0, 5])
    True
    
    >>> np.any([[True, False], [True, True]])
    True
    
    >>> np.any([[True, False], [False, False]], axis=0)
    array([ True, False])
    

    7. 数组中是否存在满足条件的数 (python check if exsit element in array satisfies a condition)

    In [1]: import numpy as np
    
    In [2]: a=np.arange(1, 13).reshape(3, 4)
    
    In [3]: a
    Out[3]: 
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12]])
    
    In [4]: a>7
    Out[4]: 
    array([[False, False, False, False],
           [False, False, False,  True],
           [ True,  True,  True,  True]])
    
    In [5]: np.any(a>7)
    Out[5]: True
    
    In [6]: np.all(a>7)
    Out[6]: False
    

    8. 数组中所有元素是否有0元素 (python check whether all elements in numpy is zero)

    https://stackoverflow.com/questions/18395725/test-if-numpy-array-contains-only-zeros

    In [1]: import numpy as np
    
    In [2]: not np.any(np.array([0, 0, 2]))
    Out[2]: False
    
    In [3]: not np.any(np.array([0, 0, 0]))
    Out[3]: True
    
    # 计算非零个数再进行判断 In [4]: np.count_nonzero(np.array([0, 0, 2])) Out[4]: 1 In [5]: np.count_nonzero(np.array([0, 0, 0])) Out[5]: 0
    # 用集合去掉重复元素再判断 In [6]: set(np.array([0, 0, 2])) Out[6]: {0, 2} In [7]: set(np.array([0, 0, 0])) Out[7]: {0}

    9. 数组找到满足一个条件或多个的索引和值(python numpy find index and value that satisfty one or multiple conditions)

    参考资料:https://thispointer.com/python-numpy-select-elements-or-indices-by-conditions-from-numpy-array/

    https://blog.csdn.net/wen123qiang/article/details/49204551

    (1)一个条件

    In [127]: c                                                                                                                                                                                                        
    Out[127]: 
    array([[ 9, 18,  1],
           [ 6,  5,  0],
           [11,  7,  0],
           [11,  4,  0],
           [ 8,  4,  1],
           [10,  5,  0],
           [17, 12,  1],
           [19,  1,  1],
           [ 8, 11,  1],
           [11, 12,  1]])
    # 找到满足条件的索引
    In [128]: np.where((c[:,2]!=0))                                                                                                                                                                    
    Out[128]: (array([0, 4, 6, 7, 8, 9]),)
    # 找到满足条件的值方法1
    In [129]: c[np.where((c[:,2]!=0))]                                                                                                                                                                          
    Out[129]: 
    array([[ 9, 18,  1],
           [ 8,  4,  1],
           [17, 12,  1],
           [19,  1,  1],
           [ 8, 11,  1],
           [11, 12,  1]])
    # 找到满足条件的值方法2
    In [130]: c[c[:,2]!=0]                                                                                                                                                               
    Out[130]: 
    array([[ 9, 18,  1],
           [ 8,  4,  1],
           [17, 12,  1],
           [19,  1,  1],
           [ 8, 11,  1],
           [11, 12,  1]])

    (2)多个条件

    # 找到满足条件的索引
    In [1]: np.where((c[:,2]!=0) & (c[:,1]==12))                                                                                                                                                              
    Out[1]: (array([6, 9]),)
    # 找到满足条件的值方法1
    In [2]: c[np.where((c[:,2]!=0) & (c[:,1]==12))]                                                                                                                                                               
    Out[2]: 
    array([[17, 12,  1],
           [11, 12,  1]])
    # 找到满足条件的值方法2
    In [3]: c[(c[:,2]!=0) & ( c[:,1]==12)]                                                                                                                                      
    Out[3]: 
    array([[17, 12,  1],
           [11, 12,  1]])
    

     

    10. 数组中所有元素相乘(python numpy multiple every element in an array)

    https://stackoverflow.com/questions/44212854/is-there-a-method-in-numpy-to-multiply-every-element-in-an-array

    In [8]: a = np.array([3, 4])
    
    In [9]: a
    Out[9]: array([3, 4])
    
    In [10]: a.shape
    Out[10]: (2,)
    
    In [11]: np.prod(a)
    Out[11]: 12
    

      

      

  • 相关阅读:
    简单的测试用例计划放法
    黑盒测试用例设计方法-等价类划分
    Redis净化板
    爬虫部署与Django
    怎样实现前端的优化
    关于Apache简介笔记
    yield生成器的经典案例
    石头剪刀布
    函数内是否可以修改传递进来的列表
    不定长参数的传递
  • 原文地址:https://www.cnblogs.com/ttweixiao-IT-program/p/11866275.html
Copyright © 2011-2022 走看看