nadrray属性
- 包含的每一个元素都是相同类型
- shape属性
- dtype属性
生成数组的方法
- 默认元素类型:float64
- 使用array函数(自动转换维数和数据类型)
- 给定长度和形状
- 使用zeros创建全0数组
- ones
- empty返回没有初始化的数组(值不一定为全0,慎用)
- arange 创建数组
转换数据类型(显示)
- astype
- 使用另一个数组的dtype类型(与astype联合使用)
数据运算
- 向量化 (无须for即可实现循环)
- 带有标量计算的算术擦欧洲哦,会把计算参数转递给数组的每一个元素
- 同尺寸的数组之间进行比较,会产生一个布尔型数组
- 不同尺寸之间的比较,将会用到广播特性
基础索引与切片
- 切片只是原数组的视图,修改都会反映到原数组
- 如果想要简单复制数组中的部分切片,请使用显示的arr.copy()
- 多维数组中的索引:arr[1][2]=arr[1,2]
- 二维数组上的索引,行称为0轴,列称为1轴
- 多维数组中,省略后续的索引值,返回的对象是降低一个维度的数组
- 标量和数组都可以赋值给一个索引位置
- 可以进行多组切片,与多组索引类似,索引与切片,后续赋值可以结合使用
布尔索引
- 当需要做两个数组数据的匹配时,采用data[names=‘bob’]形式的匹配相应行
- 借助逻辑表达式 != 或~取反 实现索引其余行
- 使用布尔索引选择数据时,总是生成数据的拷贝(与切片的视图不一样(相反))
-
python and 和or 对布尔数组没有作用使用& 和 - data[data<0]=0 这种适合于做数据清洗,用于纠正错误值。
- 神奇索引:使用整数数组进行索引(使用多个索引数组会有点不同,是使用对应数组的位置元素定位索引,一般结果总是一维的)
- 神奇索引也是采用复制数组方式到新数组。
数组转置与换轴
- arr.T
- arr.transpose() (这个比较难理解)
- arr.swapaxes()(难理解)
通用函数
- ufunc逐元素操作函数
- sqrt
- exp
- 二元通用函数 add,maximun 接受两个数组返回一个数组
- 返回多个数组:np.modf(arr)
使用数组进行面向数组编程
- np.meshgrid(x,y)网格点坐标生成函数
- 逻辑运算:np.where(arr>0,2,-2) arr中大于0 的元素赋值为2,小于0 的赋值为-2
- 数学和统计:聚合(sum,mean,std)给定一个可选参数axis用于计算指定轴上的统计值
- 布尔值数组方法(any,all)
- 排序 (按轴排序,计算数组的分位数)
- 唯一值与其他集合逻辑(unique返回排序好的去重值,in1d返回一个数组中的值是否在另一个数组中的布尔值)
- 文件输入输出(np.save,np.load,savaz()保存多个数组,savez_compressed保存在压缩文件中)
线性代数
- dot,trace,det…
伪随机数生成
- numpy.random弥补Python內建random模块的不足
进阶的实例
- 创建一个 5x5 的二维数组,其中边界值为1,其余值为0
Z = np.ones((5,5))
Z[1:-1,1:-1] = 0
Z
- 创建一个 5x5 的二维数组,并设置值 1, 2, 3, 4落在其对角线下方
Z = np.diag(1+np.arange(4),k=-1)
创建一个 10x10 的二维数组,并使得 1 和 0 沿对角线间隔放置
Z = np.zeros((10,10),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
Z
使用 NumPy 打印昨天、今天、明天的日期
yesterday = np.datetime64(‘today’, ‘D’) - np.timedelta64(1, ‘D’) today = np.datetime64(‘today’, ‘D’) tomorrow = np.datetime64(‘today’, ‘D’) + np.timedelta64(1, ‘D’) print(“yesterday: “, yesterday) print(“today: “, today) print(“tomorrow: “, tomorrow)
- 使用五种不同的方法去提取一个随机数组的整数部分
Z = np.random.uniform(0,10,10) print(“原始值: “, Z)
print (“方法 1: “, Z - Z%1) print (“方法 2: “, np.floor(Z)) print (“方法 3: “, np.ceil(Z)-1) print (“方法 4: “, Z.astype(int)) print (“方法 5: “, np.trunc(Z))
- 创建一个 5x5 的矩阵,其中每行的数值范围从 1 到 5 Markdown Code
Z = np.zeros((5,5)) Z += np.arange(1,6)
Z
- 创建一个长度为 5 的等间隔一维数组,其值域范围从 0 到 1,但是不包括 0 和 1
Z = np.linspace(0,1,6,endpoint=False)[1:]
Z
创建一个长度为10的随机一维数组,并将其按升序排序¶
Z = np.random.random(10) Z.sort() Z
- 创建一个 3x3 的二维数组,并将列按升序排序
Z = np.array([[7,4,3],[3,1,2],[4,2,6]]) print(“原始数组: \n”, Z)
Z.sort(axis=0) Z
- 创建一个长度为 5 的一维数组,并将其中最大值替换成 0
Z = np.random.random(5) print(“原数组: “,Z) Z[Z.argmax()] = 0 Z
将 float32 转换为整型
Z = np.arange(10, dtype=np.float32) print(Z)
Z = Z.astype(np.int32, copy=False) Z