11.广播
>>> a = np.arange(0,60,10).reshape(-1,1) # 列向量>>> b = np.arange(0,6) # 行向量>>> aarray([[ 0],[10],[20],[30],[40],[50]])>>> barray([0, 1, 2, 3, 4, 5])>>> a[0] + b # 数组与标量的加法array([0, 1, 2, 3, 4, 5])>>> a[1] + barray([10, 11, 12, 13, 14, 15])>>> a + b # 广播array([[ 0, 1, 2, 3, 4, 5],[10, 11, 12, 13, 14, 15],[20, 21, 22, 23, 24, 25],[30, 31, 32, 33, 34, 35],[40, 41, 42, 43, 44, 45],[50, 51, 52, 53, 54, 55]])>>> a * barray([[ 0, 0, 0, 0, 0, 0],[ 0, 10, 20, 30, 40, 50],[ 0, 20, 40, 60, 80, 100],[ 0, 30, 60, 90, 120, 150],[ 0, 40, 80, 120, 160, 200],[ 0, 50, 100, 150, 200, 250]])
12.分段函数
>>> x = np.random.randint(0, 10, size=(1,10))>>> xarray([[0, 4, 3, 3, 8, 4, 7, 3, 1, 7]])>>> np.where(x<5, 0, 1) # 小于5的元素值对应0,其他对应1array([[0, 0, 0, 0, 1, 0, 1, 0, 0, 1]])>>> np.piecewise(x, [x<4, x>7], [lambda x:x*2, lambda x:x*3])# 小于4的元素乘以2# 大于7的元素乘以3# 其他元素变为0array([[ 0, 0, 6, 6, 24, 0, 0, 6, 2, 0]])
13.计算唯一值及出现次数
>>> x = np.random.randint(0, 10, 7)>>> xarray([8, 7, 7, 5, 3, 8, 0])>>> np.bincount(x) # 元素出现次数,0出现1次,# 1、2没出现,3出现1次,以此类推array([1, 0, 0, 1, 0, 1, 0, 2, 2], dtype=int64)>>> np.sum(_) # 所有元素出现次数之和等于数组长度7>>> len(x)7>>> np.unique(x) # 返回唯一元素值array([0, 3, 5, 7, 8])>>> x = np.random.randint(0,10,2)>>> xarray([2, 1])>>> np.bincount(x) # 结果数组的长度取决于原始数组中最大元素值array([0, 1, 1], dtype=int64)>>> x = np.random.randint(0, 10, 10)>>> xarray([3, 6, 4, 5, 2, 9, 7, 0, 9, 0])>>> y = np.random.rand(10) # 随机小数,模拟权重>>> y = np.round_(y, 1) # 保留一位小数>>> yarray([ 0.6, 0.8, 0.8, 0. , 0.6, 0.1, 0. , 0.2, 0.8, 0.7])>>> np.sum(x*y)/np.sum(np.bincount(x)) # 加权总和/出现总次数或元素个数2.9199999999999999>>> sum(x*y)/len(x) # 数组支持Python内置函数2.9199999999999999
14.计算加权平均值
>>> x=np.random.randint(0,10,10)>>> xarray([7,8,5,8,0,7,6,5,6,9])>>> y=np.array([round(i,1) for i in list(np.random.random(10))])>>> yarray([0.6,0.8,0.8,0.,0.6,0.1,0.,0.3,0.8,0.7])>>> np.sum(x*y)/np.sum(np.bincount(x))
15.矩阵运算
>>> a_list = [3, 5, 7]>>> a_mat = np.matrix(a_list) # 创建矩阵>>> a_matmatrix([[3, 5, 7]])>>> a_mat.T # 矩阵转置matrix([[3],[5],[7]])>>> a_mat.shape # 矩阵形状(1, 3)>>> a_mat.size # 元素个数3>>> a_mat.mean() # 元素平均值5.0>>> a_mat.sum() # 所有元素之和15>>> a_mat.max() # 最大值7>>> a_mat.max(axis=1) # 横向最大值matrix([[7]])>>> a_mat.max(axis=0) # 纵向最大值matrix([[3, 5, 7]])>>> b_mat = np.matrix((1, 2, 3)) # 创建矩阵>>> b_matmatrix([[1, 2, 3]])>>> a_mat * b_mat.T # 矩阵相乘matrix([[34]])>>> c_mat = np.matrix([[1, 5, 3], [2, 9, 6]]) # 创建二维矩阵>>> c_matmatrix([[1, 5, 3],[2, 9, 6]])>>> c_mat.argsort(axis=0) # 纵向排序后的元素序号matrix([[0, 0, 0],[1, 1, 1]], dtype=int64)>>> c_mat.argsort(axis=1) # 横向排序后的元素序号matrix([[0, 2, 1],[0, 2, 1]], dtype=int64)>>> d_mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])>>> d_mat.diagonal() # 矩阵对角线元素matrix([[1, 5, 9]])>>> d_mat.flatten() # 矩阵平铺,行优先matrix([[1, 2, 3, 4, 5, 6, 7, 8, 9]])>>> d_mat.flatten('F') # 矩阵平铺,列优先matrix([[1, 4, 7, 2, 5, 8, 3, 6, 9]])计算相关系数矩阵(对称矩阵,对角线上元素表示自相关系数)>>> np.corrcoef([1,2,3,4], [4,3,2,1]) #负相关,变化方向相反array([[ 1., -1.],[-1., 1.]])>>> np.corrcoef([1,2,3,4], [1,2,3,4]) #正相关,变化方向一致array([[ 1., 1.],[ 1., 1.]])>>> np.corrcoef([1,2,3,4], [1,2,3,40])#正相关,变化趋势接近array([[ 1. , 0.8010362],[ 0.8010362, 1. ]])
文章转载自糟老头修炼记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




