官方函数功能查找网址:https://docs.scipy.org/doc/numpy/reference/
一.numpy常用功能速查
内容转载自:https://zhuanlan.zhihu.com/p/27334246
1.创建ndarray对象
- np.array([[1,2,3],[3,4,5]],dtype=float64):将输入数据(列表、元组、数组等)转换为ndarray。如果不指定dtype,会自动推断
- np.asarray((1,2,3)) #将输入装换为ndarray
- np.arange(10,25,5)#类似内置的range,返回ndarray
- np.ones((2,2),dtype=np.int32),np.ones_like(arr) #根据指定的形状和dtype创建全1数组。ones_like以另一个数组作为形状参数
- np.zeros((2,2),dtype=np.int32),np.zeros_like(arr)#同上,返回的元素都为0
- np.empty((2,2),dtype=np.float),np.empty_like(arr)#同上,返回的元素是未初始化的垃圾值
- np.eye(2),np.identity(3)#创建一个N*N的单位矩阵(对角线为1,其余为0)
- np.linspace(0,2,9)#创建等差数列,[0,2]中取9个数
2.索引和切片
- arr[2],arr[0][2]#基础索引
- A=a1*a2*...*an,an-1代表行,an代表列,A[0]代表从a1这个维度切片
- arr[1,:2],arr[1:2,:2]#切片索引,注意两者的差别,前者的结果是一维数组,后者是二维的
- arr[arr>0],arr[arr[:,1]==0,:]#布尔型索引,注意布尔型数组的形状/长度必须与被索引的数组形状/轴长度一致
- arr[[1,2,3],[2,1,0]]#花式索引,选出3个元素组成的一维数组,(1,2),(2,1),(3,0)
- arr[[1,5,7,2]][:,[0,3,1,2]],arr[:,[0,3,1,2]][[1,5,7,2]] #两个花式索引的先后顺序可变,不影响结果
- 总结一下:基本索引/切片、布尔索引、一级花式索引(仅传入一组数组)都是引用视图,,但是,花式索引中一次传入多个索引数组则会创建副本
3.数组的维度和形状变化
- arr.reshape((2,3))#更改数组的形状,数组中元素的顺序不变
- arr.T,arr.transpose((1, 0, 2))#简单转置和高级转置,用元组表示转换位置的轴,都会创建副本
- arr.swapaxes(1,2)#另一种转换轴位置的方法,生成的是视图
- 所有的转置都会导致数据中元素顺序的变化
4.通用函数:快速的元素级数组函数
- 一元ufunc
- np.abs(arr),np.fabs(arr)#计算整数、浮点数或复数元素的绝对值
- sqrt,square#计算数组中各元素的平方根、平方
- exp,log#计算各元素的指数e的x次方及自然对数
- log10,log2,log1p#分别是底数为10的log,底数为2的log,以及log(1+x)
- np.sign(arr)#计算各元素的正负号
- ceil,floor,rint#分别是大于等于该值的最小整数,小于等于该值的最大整数,四舍五入后最接近的整数
- modf#将数组的小数和整数部分以两个独立数组返回,,返回多个数组哦~
- isnan,isfinite,isinf#分别返回"哪些是NaN"“哪些是有穷的”“那些是无穷的”的布尔型数组
- cos,cosh,sin,sinh,tan,tanh,arcos,arcosh等三角反三角函数
- np.logical_not(arr)#相当于-arr,一般用于布尔型数组
- 二元ufunc
- np.add(arr,brr),arr+brr#两个元素或数组相加
- np.subtract(arr,brr),arr-brr#两个元素或数组相减
- np.divide(arr,brr),arr/brr#两个元素或数组相除
- np.multiply(arr,brr),arr*brr#两个元素或数组相除
- np.floor_divide(arr,brr),np.mod(arr,brr) #向下圆整除法(丢弃余数)和求模计算(除法的余数)
- np.power(arr,brr),arr**brr#乘方,既能是数组也能是元素,同上
- maximum,fmax#元素级的最大值计算,fmax将忽略NaN
- minimum,fmin#最小值计算,同上
- copysign#将第二个数组中值的符号复制给第一个数组中的值
- greater,greater_equal,less,less_equal,equal,not_equal#相当于中缀运算符>,>=,<,<=,=,!=,产生布尔型数组
- logical_and,logical_or,logical_xor#执行元素级的真值逻辑运算,相当于&,|,^
5.基本的数组统计方法(一般会有聚合效果)
- np.sum(arr),arr.sum(),np.sum(arr,axis),arr.sum(axis)#对数组中全部或某轴向的元素求和
- mean,std,var#分别代表平均值、标准差和方差(自由度可调默认为n),使用方法同上
- min,max,argmin,argmax#最小值最大值,最小元素和最大元素(第一个)的索引,使用方法同上
- cumsum,cumprod#所有元素的累加与累积,不发生聚合
- 以上的统计方法,在使用轴参数时,都是计算该轴上各元素的统计值,比如axis=1即在列上计算每行对应数据的统计值
6.其它特殊函数
- where(cond,arr,brr)#cond是条件数组,arrbrr可以是数组或是数值,还可以多重嵌套
- arr.sort(axis)#数组多维时,默认在axis=0上排序。返回数组的已排序副本,就地排序则会修改原数据
7.数组的集合运算
- np.unique(arr)#找出数组中的唯一值并返回有序结果
- intersect1d(arr,brr),union1d(arr,brr)#分别计算交集和并集,并返回有序结果
- in1d(arr,brr)#得到一个表示"arr的元素是否包含于brr"的布尔型数组,size与arr相同
- setdiff1d(x,y),setxor1d(x,y)#集合的差和对称差
8.存取数据I/O(文本或二进制文件)
- np.load('some_array.npy') #读取二进制文件记得带上后缀n(女)p(朋)y(友)
- np.save('some_array.npy',arr) #存在当前路径下,二进制格式
- np.savez('array.npz',arr,brr)#存储多个数组到一个压缩文件
- np.load('array.npz')['arr']#读取压缩文件并选取其中一个数组
- np.loadtxt('array.txt',delimiter=','),np.savetxt('array.txt',delimiter=',')#存取文本文件,delimiter表示分隔符号
9.Numpy的数据类型
10.线性代数计算函数
- np.dot(x,y),x.dot(y)#矩阵乘法
- det#计算矩阵行列式
- arr,brr=qr(crr)#计算QR分解
- solve#解线性方程组Ax=b,其中A为方阵
11.随机数模块random
- np.random.seed(123456)#确定随机数生成器的种子数量
- np.random.rand(d1,d2,,dn)#元素是(0,1)之间的随机数,均匀分布
- np.random.randn(d0, d1, ...,dn)# 返回一个标准正态分布(平均值为0,标准差为1)
- randint(a,b,(d1,d2,,,dn))#给定上下限范围随机选取整数,[a,b)
- np.random.choice(arr,size,replace,p)#arr可以是一维数组或整数,size指结果数组大小,replace=False指结果数据不重复,p指原始数据选取概率的列表。举两个例子np.random.choice(5,4,replace=False,p=[0.1,0.1,0,0,0.8])与np.random.choice(arr,brr)
- permutation#返回一个随机排列,参数可以是整数或数组
- np.random.normal(loc,scale,size)#返回正态分布,loc是均值,scale是标准差,size是数组大小
- binomial(n,p,size)#二项分布,独立事件发生概率为p,n次伯努利实验后成功发生的次数
- uniform(low, high, size)#均匀分布,[low,high)
- np.random.chisquare(df,size)#卡方分布,前面是自由度,后面是size
二、np.random.seed()
功能解释:https://blog.csdn.net/linzch3/article/details/58220569
seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
三、两个数组合并或拼接
内容转载自:https://blog.csdn.net/hustqb/article/details/78090365
Python中numpy数组的合并有很多方法,如
- np.append()
- np.concatenate()
- np.stack()
- np.hstack()
- np.vstack()
- np.dstack()
其中最泛用的是第一个和第二个。第一个可读性好,比较灵活,但是占内存大。第二个则没有内存占用大的问题。
方法一——append
parameters | introduction |
---|---|
arr | 待合并的数组的复制(特别主页是复制,所以要多耗费很多内存) |
values | 用来合并到上述数组复制的值。如果指定了下面的参数axis 的话,则这些值必须和arr 的shape一致(shape[axis]之外都相等),否则的话,则没有要求。 |
axis | 要合并的轴 |
例程:
方法二——concatenate
parameters | introduction |
---|---|
*arrays | 这些数组除了在待合并的axis(默认为axis=0)上之外,必须具有相同的shape |
axis | 待合并的轴,默认为0 |
例程: