python numpy

来源:互联网 发布:软件项目验收程序 编辑:程序博客网 时间:2024/05/17 12:57

import numpy as np
通过给array中传入Python的序列对象来创建数组。如果传入的是嵌套的序列,就创建多维数组。
数组的大小可以通过shape来获得。如果某个轴的元素为-1,就会根据数据元素的个数来计算这个轴的长度。eg: a=[[1,2],[3,4],[5,6]] a.shape=2,-1 #将a变成横轴为2,竖轴为3的形式。
数组元素的类型通过dtype获得。

创建数组的一个方式是先创建一个Python的list然后通过array函数将其变为数组。这里有一些直接创建数组的函数。
arrange()创建一维数组,参数包括开始值,终止值,步长。
linspace()创建一维数组,参数包括开始值,终止值,个数

存取序列:
通过下标范围 eg: a[1:5] a[:-1] 和原始数组共享同一块数据空间,改变一个另一个也改变。
使用整数序列,序列可是数组或列表 eg: b = a[[1,4,5]] 获取a中下标为1,4,5的元素,不和原始数据共享空间。也可以通过整数序列改变元素的值。
使用布尔数组,收集数组中对应布尔数组中为true的元素,不和原始数据共享数据空间,只针对布尔数组,不可以用布尔列表。 eg : a = b[np.array([true,false,true,true]) 如果使用的布尔列表就把true当1,false当0,当做下标来存取。布尔数组长度不够时,剩下的都用false补齐。也可以通过布尔数组下标改变元素的值。
多维数组使用组元作为下标,组元只要使用逗号分开就可以。
这里写图片描述

结构数组:
首先创建一个dtype对象,通过字典参数描述结构类型的各个字段。字典有两个关键字names,formats。每个关键字对应的都是一个列表。names定义结构中的字段名,而formats定义每个字段的类型。
然后使用array创建数组,dtype属性为创建的dtype对象。
这里写图片描述
a[0]是一个结构元素,看上去和元组形式差不多。和数组 a 共享内存数据。
结构像字典一个可以通过字符串下标获得对应的字段值。

ufunc运算:
是universal function的缩写。是对数组每一个元素进行操作的函数
y = np.sin( x ) 对每一个元素求sin,计算后 x 的值并没有改变。如果想要将计算结果覆盖到 x 上,可以将 x 当做第二个参数 y = np.sin( x , x )
数组的加减乘除可以直接用符号来计算,也可以使用函数。这里写图片描述
当使用ufunc函数对两个数组进行运算时,ufunc函数会对两个数组对应元素进行计算,如果两个数组shape不同的话,会进行如下处理:
让所有的输入数组都向其中shape最长的数组看齐,shape不足的都通过在前面加 1 补齐;
输出数组的shape是输入数组shape的各个轴的最大值;
如果输入数组的某个轴和输出数组的对应轴长度为1时,这个数组能够计算,否则出错;
当输入数组的某个轴的长度为1时,沿着此轴运算都用到此轴上的第一组值。
reduce方法:和Python的reduce方法类似,沿着axis轴对array进行操作。

矩阵运算:
dot ,inner,outer
文件存取:
numpy文件存取的格式分为两类:二进制和文本。而二进制又分为numpy专用的格式化二进制类型和无格式类型。
使用数组的方法tofile可以将数组数据以二进制格式写进文件。tofile输出的数据没有格式。所以读取数据的时候需要自己格式化数据。
这里写图片描述
所以读入数据的需要自己定义dtype和shape才可以保证数据一致。
numpy.load 和 numpy.save 函数以numpy专用的二进制类型保存数据。会自动处理shape等,方便但是难与其他语言读入。
如果想要将多个数组保存到一个文件中的话,可以使用numpy.savez函数,第一个参数是文件名,其他参数都是需要保存的数组,可以使用关键字为数组起名,非关键字的话,会自动取名为‘arr_0,arr_1,….’savez函数输出是一个压缩文件,每一个文件都对应save函数保存的数组,文件名对应于数组名。
这里写图片描述

random模块
np.random.rand(shape) 生成0到1之间的随机数
np.random.randn(shape) 生成标准正态分布
np.random.randint(low,high,shape) 返回随机整数,在[low,high)区间
np.random.random(shape) 返回随机浮点数,在区间[0.0 1.0)
np.random.sample(population ,k) 从population中随机选择k个

tile(A,shape) 将A以shape形状重复
A.flags.writeable= False 将array的属性设置为只读
argmax() argmin() 求数组中最大值,最小值对应的下标
any函数,判断矩阵元素是否满足条件,是的话返回true
flat是一维迭代器,将数组当成一维向量去遍历,A.flat[5]索引出A的第五个元素

numpy中数组的拷贝:
赋值是浅拷贝,改变其中一个的值,另一个也随之改变。例如修改a[2]=10,那么b[2]也随之改变。b只是a的一个映射。
如果想完完全全的复制a,但b和a没有任何关系,就要使用copy函数,这个是深拷贝,改变a的值并不会影响b的值。

np.where(condition,x,y) condition is true 返回x false 返回y
这里写图片描述

0 0