Weaving Wong

总觉得该写点啥...

嗨,我是Weaving,一名机器学习爱好者.


分享读书、学习、生活感悟

Numpy 基础笔记

nadrray属性

  • 包含的每一个元素都是相同类型
  • shape属性
  • dtype属性

生成数组的方法

  • 默认元素类型:float64
    1. 使用array函数(自动转换维数和数据类型)
    2. 给定长度和形状
    • 使用zeros创建全0数组
    • ones
    • empty返回没有初始化的数组(值不一定为全0,慎用)
      1. 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)

  1. 使用五种不同的方法去提取一个随机数组的整数部分

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))

  1. 创建一个 5x5 的矩阵,其中每行的数值范围从 1 到 5 Markdown Code

Z = np.zeros((5,5)) Z += np.arange(1,6)

Z

  1. 创建一个长度为 5 的等间隔一维数组,其值域范围从 0 到 1,但是不包括 0 和 1

Z = np.linspace(0,1,6,endpoint=False)[1:]

Z

创建一个长度为10的随机一维数组,并将其按升序排序¶

Z = np.random.random(10) Z.sort() Z

  1. 创建一个 3x3 的二维数组,并将列按升序排序

Z = np.array([[7,4,3],[3,1,2],[4,2,6]]) print(“原始数组: \n”, Z)

Z.sort(axis=0) Z

  1. 创建一个长度为 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

最近的文章

pandas 基础笔记(1) 数据结构与功能

场景识别 numpy 适合于处理同质型的数值类数组数据 pandas适合于处理表格型或异质型数据工具数据结构 series 包含索引的数值序列,类似numpy数组 通过values和index属性分别获得值和索引 通常需要创建索引标签来标识每个数据点 可以通过索引的方式选取Series中的单个或一组值 还可以将Series看成是一个定长的有序字典 ...…

pandas继续阅读
更早的文章

多级目录的python 包、模块的引用问题

如果发现系统报错:找不到模块那是因为自建模块没有加入到系统的环境变量路径中。在导入包之前 加上包的上级目录的路径就可以解决。需要注意的是:在命令行执行时,若在文件中是使用的相对路径进行所有的路径操作1.或者包的导入,2.或者文件的读写那执行Python时必须切换到相应的py文件目录中再执行。…

axis继续阅读