import numpy as np ''' 一.算术运算 元素级 1.标量 加减乘除 数组(元素级:位置对应) 自增和自减 通用函数 2.数组 +-*/ 数组 (元素级) 3.条件和布尔运算 a>0.5 满足的True,不满足False a[a>0.5]:满足条件的组成新的数组 非元素级 1.矩阵的积 dot(A,B) A.dot(B) 2.聚合函数 【求和:a.sum(),最值:a.max(),平均值:a.mean(),标准差:a.std()】 二.数组操作 1.连接数组【同矩阵类似】 1.1垂直扩展(入栈) vstack(A,B) 1.2水平扩展(入栈) hstack(A,B) 2.数组切分 2.1垂直切分 vsplit() 2.2水平切分 hsplit() 2.3 np.split(H,(1,3),axis=0) split切分,需要指定轴 三.常用概念 1.副本或视图:数组运算 和 操作 返回的不是副本就是视图 但是赋值运算不会创建副本【a b = a b在运用时时在调用a,没有副本,所以a改变了,b的调用值夜改变】可以用copy()创建副本 2.向量化 3.广播机制 【数组兼容:两数组的每一维等长或者其中一个数组是一维的】【两原则:1.缺失的维度补上1 2.较小数组扩充维度,使之与大数组维度相同】 4.结构化数组 5.数组文件的读写 ''' A = np.zeros((3,3)) ##3行3列 B = np.ones((2,3)) ##2行3列 C = np.transpose(B) ##转置 D = np.vstack((A,B)) E = np.hstack((A,C)) F = np.transpose((D)) H = np.vstack((E,F)) ##1.1垂向入栈 print(D) ''' [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.] [1. 1. 1.] [1. 1. 1.]] ''' ##1.2横向入栈 print(E) ''' [[0. 0. 0. 1. 1.] [0. 0. 0. 1. 1.] [0. 0. 0. 1. 1.]] ''' print(H) ''' [[0. 0. 0. 1. 1.] [0. 0. 0. 1. 1.] [0. 0. 0. 1. 1.] [0. 0. 0. 1. 1.] [0. 0. 0. 1. 1.] [0. 0. 0. 1. 1.]] ''' ##2.1垂直切分 np.vsplit(H,2)均分为两部分 [A1,A2,A3] = np.vsplit(H,(1,3)) ## 按行索引1,3,分开,分成3部分 print(A1) print(A2) print(A3) ##2.2水平切分 [B1,B2,B3] = np.hsplit(H,(1,3)) ## 按列索引1,3,分开,分成3部分 print(B1) print(B2) print(B3) ##2.3 np.split(H,(1,3),axis=0) split切分,需要指定轴 ### 广播机制 a = np.arange(16).reshape((4,4)) b = np.arange(4) print(a.shape) print(b.shape) ''' [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [0 1 2 3] (4, 4) (4,) 为缺失的维度补上1 (4,1) ''' c = a+b print(c) ''' [[ 0 2 4 6] [ 4 6 8 10] [ 8 10 12 14] [12 14 16 18]] 一维数组+二维数组,其中一个数组是一维,满足兼容条件。可以应用广播机制。 第二个原则:缺失元素都用已有元素填充 [0,1,2,3] 填充后 [[0,1,2,3] [0,1,2,3] [0,1,2,3] [0,1,2,3]] ''' ###两个数组形状和维度不同 m = np.arange(6).reshape(3,1,2) n = np.arange(6).reshape(3,2,1) print(m) print(n) print(m+n) ''' [[[0 1]] [[2 3]] [[4 5]]] [[[0] [1]] [[2] [3]] [[4] [5]]] m数组:第二维1 扩充到2 已有元素填充 [[[0 1],[[0 1]] [[2 3],[2 3]] [[4 5],[4 5]]] n数组 :第3维 1 扩充到2 已有元素填充 [[[0,1],[1,1]] [[2,2],[3,3]] [[4,4],[5,5]]] m+n: [[[ 0 1],[ 1 2]] [[ 4 5],[ 5 6]] [[ 8 9],[ 9 10]]] '''