'''
@Author: Dylan
@Date: 2020-05-21 13:57:51
@LastEditTime: 2020-05-21 17:26:38
@LastEditors: Dylan
@Description: Numpy
@FilePath: \python_code\test.py
'''import numpy as np
#numpy属性
arr = np.array([[1,2,3],[2,3,4]])#二维 矩阵print(arr)print('number of dim:',arr.ndim)#几维数据 print('shape:',arr.shape)#行数列数print('size:',arr.size)#多少元素#numpy的创建
a = np.array([1,2,3,4,5,6],dtype =int)#元素类型dtypeprint(a)print(a.dtype)
a = np.zeros((3,4))#生成3行4列,且元素均为0print(a)
a = np.ones((3,4),dtype =float)#生成3行4列,且元素均为1,元素类型为floatprint(a)print(a.dtype)
a = np.empty((3,4,5))#生成3行4列,且元素均为几乎接近为0print(a)#生成有序的序列
a = np.arange(10,20,2)#起始10,结尾20 - 1,步长2print(a)
a = np.arange(10)#生成0到10 - 1 的序列print(a)
a = np.arange(12).reshape((3,4))#生成0到12 - 1 的序列,且为3行4列print(a)#生成线段
a = np.linspace(1,10,20)#生成1到10的线段,且一共有20段print(a)
a = np.linspace(1,10,6).reshape((2,3))#生成1到10的线段,且一共有6段, 且为2行3列print(a)#numpy的基本运算
a = np.array([10,20,30,40])
b = np.arange(4)print(a,b)# + - * / ** 对应元素运算
c = a - b
print(c)
c = b**3# 幂是采用**, 而不是 ^print(c)#三角运算 sin cos tan 弧度制
c =10* np.sin(a)print(c)#判断元素是否满足某个条件print(b)print(arr<3)#b有哪些元素小于3#矩阵运算
a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))print(a)print(b)
c = a * b #元素对应相乘
c_dot = np.dot(a,b)#矩阵乘法运算1
c_dot_2 = a.dot(b)#矩阵乘法运算2print(c)print(c_dot)print(c_dot_2)#创建一个随机生成 0-1 的2行4列的序列
a = np.random.random((2,4))print(a)print(np.sum(a))#求和print(np.min(a))#求最小值print(np.max(a))#求最大值print('123123')print(np.sum(a, axis =1))#求得在矩阵中,每一行的求和 axis = 1,在行数中求和print(np.sum(a, axis =0))#求得在矩阵中,每一列的求和 axis = 0,在列数中求和print(np.max(a, axis =1))#求得在矩阵中,每一行的最大值 axis = 1,在行数中求和print(np.max(a, axis =0))#求得在矩阵中,每一列的最大值 axis = 0,在列数中求和print(np.min(a, axis =1))#求得在矩阵中,每一行的最小值 axis = 1,在行数中求和print(np.min(a, axis =0))#求得在矩阵中,每一列的最小值 axis = 0,在列数中求和#numpy的基础运算2
A = np.arange(2,14).reshape(3,4)print(A)print(np.argmin(A))#最小值的索引,因为最小值是2,且2是在第0位,所以值为0print(np.argmax(A))#最小值的索引,因为最大值是14,且14是在第11位,所以值为11print(np.mean(A))#平均值print(A.mean())#平均值print(np.average(A))#平均值print(np.median(A))#中位数print(A)print(np.cumsum(A))#逐步累加print(np.diff(A))#彼此累差 如第一个值为 第2个数 - 第1个数; 第二个值为 第3个数 - 第2个数;
A = np.arange(12).reshape(3,4)print(A)print(np.nonzero(A))#打印出非0的元素位置, 第一个array代表行, 第二个array代表列, 每个位对应起来#如 第一个array的第1位为0,代表第0行;而第二个array的第1位为1,代表第1列; 即为第0行1列的元素非0#排序
a = np.arange(14,2,-1).reshape((3,4))print(a)print(np.sort(a))#若为二维, 则为逐行排序#矩阵的反向print(a)print(np.transpose(a))print(a.T)#反向后再矩阵乘法print((a.T).dot(a))print(a)print(np.clip(a,5,9))# 第1个参数:array 第2个参数:小于该值时,均为该值 第3个参数:大于该值时,均为该值print(a)print(np.mean(a, axis =0))#每一列的平均值print(np.mean(a, axis =1))#每一行的平均值#numpy的索引
A = np.arange(3,15)#一维print(A)#位置索引print(A[3])#第3个值
A = np.arange(3,15).reshape((3,4))#二维print(A)print(A[2])#索引第二行内容print(A[1][1])#索引第一行第一列内容print(A[1,1])#索引第一行第一列内容print(A[2,:])#第二行所有数print(A[:,1])#第一列所有数print(A[1,1:3])#第一行,从1到3列的所有数for row in A:#打印每一行print(row)for column in A.T:#打印每一列 通过对称print(column)print(A.flatten())#将矩阵A变为一维for item in A.flat:#打印每一个元素 通过把矩阵A变为一维print(item)#numpy的array合并
A = np.array([1,1,1])
B = np.array([2,2,2])#上下合并 vertical stack 多个array合并
C = np.vstack((A,B,B,A))print(A.shape, C.shape)print(C)#左右合并 horizontal stack
D = np.hstack((A,B,A,B))print(D.shape)print(D)#加一个维度,将行改为列print(A)
B = A[:,np.newaxis]print(B)
A = np.array([1,2])[:,np.newaxis]
B = np.array([2,3])[:,np.newaxis]#多个array合并,并选择上下左右合并
C = np.concatenate((A,B),axis =0)#左右合并print(C)
C = np.concatenate((A,B),axis =1)#左右合并print(C)#numpy的array分割
A = np.arange(12).reshape((3,4))print(A)#纵向分割 分成2块print(np.split(A,2,axis =1))#横向分割 分成3块print(np.split(A,3,axis =0))#split只能实现等量分割print(np.array_split(A,3,axis =1))#不等量分割print(np.vsplit(A,3))print(np.hsplit(A,2))#numpy的copy & deep copy
a = np.arange(4)print(a)
b = a #b完全是aprint(b)print(b is a)
c = a
d = b #d完全是b 所以 d 完全是 a
a[0]=11print(a, b , d)
d[1:3]=[22,33]print(d, a)#若想 b 赋值a, 但两者不关联
b = a.copy()# deep copyprint(b)
a[3]=44print(a, b)