python numpy

xiaoxiao2021-02-28  88

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

数组的分割: numpy.split( ary, indices_or_sections, axis =0) 将一个数组分割成多个 sub-array,返回一个 list of ndarrays 参数: ary:一个 array indices_or_sections:一个整数 N 或者是一个 1-D array of sorted integers,如果是整数,array将会沿着 axis 的方向等分成 N 份,如果是另一个,则会沿着 axis,在 1-D array 元素处分割,例如,[2,3],axis=0,结果是

ary[:2]ary[2:3]ary[3:] axis: along which to split

numpy.frombuffer(buffer ,dtype=float) 将缓冲区的内容变成一维数组

numpy.expand_dims(array,axis) 增加数组的维度

numpy.diff(a, n=1,axis=-1) 沿着指定的方向计算离散差值 a:array n:进行差值计算的次数 axis:进行计算的方向

numpy.where() 两种用法 1) numpy.where(condition) 返回一个元组,返回符合 condition 的索引值,坐标以元组的形式给出,一般原数组有几维,输出的元组就有几维,分别对应符合条件的元素的各维坐标

a = np.arange(10) b = np.where(a>5) # b = (array([6,7,8,9]),)

2) numpy.where(condition,x,y) 复合条件返回 x ,否则返回 y

np.argpsrt(a) 返回数组从小到大的索引值,是一个数组

转载请注明原文地址: https://www.6miu.com/read-64804.html

最新回复(0)