numpy简单解析

此博客仅是我平时学习遇到的一些小代码

导入函数库

import numpy as np

np. sum (x)
x. max ( )


各种函数解析

产生数据

np.random.uniform(-1,1,3)				#在[-1,1)内随机输出三个数,那个3也可以换成(2,3)生成2行3列的矩阵

np.arange(x,y,z)						#生成一个[x,y)的列表,步长为z

np.linspace(x,y,z,endpoint=True)	    #在[x,y]内生成z个等间距数,endpoint为false时不包含末端点。默认为true

np.random.rand(10)						#生成10个[0,1)内的随机数,并且可以控制形状一维,二维,N维,维度用数字隔开就好。

np.random.randint(a,b,c)  #			#a:最小值,b:最大值,在[a,b)内随机生成。   c:是一个区间,生成矩阵,可以用c调控维数   例:(2,3)2行3列

np.random.randn(10#返回一个一维矩阵,里面有十个数,具有标准正态分布

np.random.randn(4,3#返回一个矩阵,四行三列。


np.logspace(x,y,z,endpoint=ture,base=2)   #起始值为2的x次方,末尾为2的y次方,共z个数。base默认为10

np.loadtxt('ABC.txt', delimiter='\t', skiprows=2, usecols=(2, 3, 4, 5), unpack=True)
#ABC.txt为文件路径,delimiter为不同列的间隔符,skiprows为跳过的行数,usecols为需要读取的列数,unpack如果是True,则分列读取

np.ones_like(x) 		#生成一个和x同类型的矩阵,不过内部全为1
np.zeros()				#生成全为0的矩阵

np.random.poisson(lam=5, size=10000)   #生成泊松分布的一堆数。

np.vstack(a,b)			#将矩阵a和b沿行合二为一
np.hstack(a,b)			#将a,b沿列合二为一

1.np.matmul 两个矩阵相乘
np.multiply 数与矩阵相乘
np.square计算元素平方

2.np.array(a) 将列表a变为矩阵

3.np.average() 获取矩阵的平均值,返回值为float

4.np.exp(a) e的a次方

5.np.dot(a,b) a和b矩阵相乘

6.np.abs() 求绝对值

7.a.shape函数,读取矩阵形状
a.reshap(β,θ)#将数组a变换成β行θ列。如果其中一个为-1的话,那么矩阵形状就和另一个数有关。-1这个位置的数为矩阵内元素总个数除以另一个数

8.a.T 矩阵转置


9.np.append(a,b,axis=0) 将值附加到数组的末尾。此时是矩阵相加。当axis是1的时候,是矩阵相同行合在一个[ ]内
np.concatenate((t1, t2…),axis=0),将t1和t2和一块。沿0轴矩阵相加,1轴是矩阵相同行相加。
append只能作用于两个矩阵,concatenate可以作用于好多矩阵。

a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[1,2,3],[4,5,6],[7,8,9]])
c=np.append(a,b,axis=0)
d=np.append(a,b,axis=1)
print(c)
print(d)

#输出
[[1 2 3]
 [4 5 6]
 [7 8 9]
 [1 2 3]
 [4 5 6]
 [7 8 9]]
 
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]
 [7 8 9 7 8 9]]


矩阵切片:

a=np.array([[1,2,3],
			[4,5,6],
			[7,8,9]])

>>>a[:2,2]			#逗号为不同维度的分割符
([3,6])
   
>>>a[:2,:1]
>([1,4])
  
>>>a[:2,:]
([1,2,3],[4,5,6])
  
>>>a[ : ,1 ]
([2,5,8])


广播
一个矩阵直接和一个数加减乘除,等于其内每一个数和它加减乘除。

#原理就是广播
a = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6)
print(a)

 [[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]
 [50 51 52 53 54 55]]

10.np.random.shuffle(x) 现场修改序列,改变自身内容。(类似洗牌,打乱顺序)
np.random.permutation(x) 返回一个随机排列,不改变自身内容

11.np.power(x,y) #矩阵x的y次方,矩阵相同部位相计算

12.np.linalg.inv():矩阵求逆
np.linalg.det():矩阵求行列式(标量)

13.np.repeat(a,b,axis= 1 or 0) #a是一个矩阵,b是一个数,作用是将a复制几个。沿0轴的话是完全将a复制b个。1轴是将a中每个元素复制b个

14.a.flatten(),a.ravel() #将任意数组变成一维数组

15.cumsum 矩阵内元素累加 a. cumsum( ) [返回结果还是一个一维矩阵,每个位置为从这个元素开始和前面元素累加的和]
cumprod 累乘

16.np.meshgrid(x, y) #画网格,x,y是两个矩阵,效果就是将以各个(x,y)为点画格子。

17.np.tile(y,t) #y为代输入数组,t为y的重复次数,不换行,重复部分还在这一行,维数不变。 T也可以为(m,n),表示每行重复n次,怼m行。

18.np.rint() #四舍五入取整
np.ceil() #向上取整。

19.后缀函数:.astype(‘类型’) #修改数据类型。

20.np.linalg.svd #返回值为三个矩阵,第一三各为奇艺矩阵,第二个为特征值组成的矩阵。

21.w=np.ployfit(x,y,z) #x,y为个数相同的矩阵,z为一个数。函数表示求出y与x的方程解析式的值的数,z为最高次方。(所以说仅限于2维曲线)

22.np.split(data, (4,), axis=1) #可以将data分为2分,前一份占四列,其余的在后面。

23.np.count_nonzero(a) #返回a内非零元素有几个。

w=np.ployfit(x,y,z)
m=np.poly1d(w)
z=m(x)
#或者
w=np.ployfit(x,y,z)
np.polyval(w,x)

3D区

np. ogrid [-3:3:100j] #从-3,3生成100个等间距数。

x, y = np.ogrid[-3:3:100j, -3:3:100j]
u = np.linspace(-3, 3, 101)
x, y = np.meshgrid(u, u)
z = x*y*np.exp(-(x**2 + y**2)/2) / math.sqrt(2*math.pi)
z = x*y*np.exp(-(x**2 + y**2)/2) / math.sqrt(2*math.pi)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, rstride=5, cstride=5, cmap=cm.coolwarm, linewidth=0.1)  #
ax.plot_surface(x, y, z, rstride=5, cstride=5, cmap=cm.Accent, linewidth=0.5)
plt.show()

np.histogramdd(x,bins=m)

posted @ 2019-08-26 18:35  lcyok  阅读(179)  评论(0)    收藏  举报