#encoding=utf-8
import numpy as np
#本节主要讲解对 numpy.array() 数据类型的操作, numpy 中的array 指的的数学中的 矩阵(行列式) matrix
def main():
lst=[[1,3,5],[2,4,6]]
print(type(lst)) #<class 'list'>
np_lst=np.array(lst)
print(type(np_lst)) #<class 'numpy.ndarray'>
np_lst=np.array(lst,dtype=np.float)
#bool,int,int8,int16,int32,int64,int128,uint8,uint16,uint32,uint64,uint128,folat,float16/32/64,complex64/128
print(np_lst.shape) #(2, 3) 表示数据结构是2行3列
print(np_lst.ndim) #2 表示数据结构维度是2
print(np_lst.dtype) #float64 表示数据类型
print(np_lst.itemsize) #8 代表每个元素占用的字节是8字节 因为上面的数据类型是float64
print(np_lst.size) #6 代表总共有的元素个数 此时总共有6*8 = 48个 字节占用
#2 常用数据 Some Arrays
print(np.zeros([2,4]))# [[0. 0. 0. 0.] [0. 0. 0. 0.]] 数组初始化 2行4列,元素值都是0
print(np.ones([3,5]))#[[1. 1. 1. 1. 1.] [1. 1. 1. 1. 1.] [1. 1. 1. 1. 1.]] 数组初始化 3行5列,元素值都是1
print("Rand:")
print(np.random.rand(2,4))#[[0.80108456 0.85873572 0.19077216 0.57489116] [0.98368305 0.54631833 0.5836906 0.5840696 ]] 数组初始化 2行4列,元素值都是0-1之间的随机数
print(np.random.rand()) # 0.5184057738632414 得到一个0-1之间的随机数
print("RandInt:")
print(np.random.randint(1,10,3)) #[9 2 1] 得到3个 1-10 之间的随机整数
print("Randn:")
print(np.random.randn(2,4)) #[[-0.03133145 -2.40511588 0.41716157 -0.40951324] [-0.16604123 -0.87621271 0.07418091 0.56484108]] 数组初始化, 2行4列,元素值都是 标准正态分布 之间的随机数
print("Choice:")
print(np.random.choice([10,20,30]))#30 得到 [10,20,30] 中随机一个元素
print("Distribute:")
print(np.random.beta(1,10,5))# [0.27342954 0.06327893 0.05248474 0.37551789 0.18812033] 得到一个贝塔分布,元素个数5
#3 Array Opes
print(np.arange(1,11)) # [ 1 2 3 4 5 6 7 8 9 10] 得到一个 1-10 的数组
print(np.arange(1, 11).reshape([2,5])) # [[ 1 2 3 4 5] [ 6 7 8 9 10]] 上面的数组重塑 得到一个2行5列的数组
#np.arange(1,11).reshape([2,-1]) 的-1 表示不指定列数量,则会根据 第一个数组arange 的元素总数 除以 行数 得到列数 10/2 =5
lst = np.arange(1,5).reshape([2,-1])
print(np.array(lst))#[[1 2] [3 4]]
print("exp 指数函数操作 底数是自然数e,指数是 lst:")
print(np.exp(lst)) # [[ 2.71828183 7.3890561 ] [20.08553692 54.59815003]] 指数函数操作 底数是自然数e,指数是 lst
print("exp2 指数函数操作 底数是2,指数是 lst:")
print(np.exp2(lst)) #[[ 2. 4.] [ 8. 16.]]指数函数操作 底数是2,指数是 lst
print("sqrt 开方:")
print(np.sqrt(lst)) #[[1. 1.41421356] [1.73205081 2. ]] 开方
print("sin 三角函数:")
print(np.sin(lst)) #[[ 0.84147098 0.90929743] [ 0.14112001 -0.7568025 ]]三角函数
print("log 对数函数操作,底数为自然数e,对数是 lst:")
print(np.log(lst)) #[[0. 0.69314718] [1.09861229 1.38629436]]对数函数操作,底数为自然数e,对数是 lst
lst = np.array([
[[1,2,3,4],[4,5,6,7]],
[[7,8,9,10],[10,11,12,13]],
[[14,15,16,17],[18,19,20,21]]
])
#axis 与数组维数 有关 ,axis的最大值是数组-1,axis取值越大,则数组的深入程度越大
print(lst.sum(axis=0))#[[22 25 28 31] [32 35 38 41]]
print(lst.sum(axis=1))#[[ 5 7 9 11] [17 19 21 23] [32 34 36 38]]
print("Sum(axis=2)")
print(lst.sum(axis=2))#[[10 22] [34 46] [62 78]]
print("Max(axis=1)")
print(lst.max(axis=1))#[[ 4 5 6 7] [10 11 12 13] [18 19 20 21]]
print("Min(axis=0)")
print(lst.min(axis=0))#[[1 2 3 4] [4 5 6 7]]
print(lst.sum()) # 252
print(lst.max()) # 21
print(lst.min()) # 1
lst1 = np.array([10,20,30,40])
lst2 = np.array([4,3,2,1])
print("Add 加法")
print(lst1+lst2) #[14 23 32 41]
print("Sub 减法")
print(lst1-lst2) #[ 6 17 28 39]
print("Mul 乘法")
print(lst1*lst2) #[40 60 60 40]
print("Div 除法")
print(lst1/lst2) #[ 2.5 6.66666667 15. 40. ]
print("Square 乘方")
print(lst1**lst2) #[10000 8000 900 40]
print("Dot 矩阵乘法") #
print(np.dot(lst1.reshape([2,2]),lst2.reshape([2,2]))) #[[ 80 50] [200 130]]
print("Concatenate 追加")
print(np.concatenate((lst1,lst2),axis=0)) # [10 20 30 40 4 3 2 1]
print("vstack 垂直追加")
print(np.vstack((lst1,lst2)))#[[10 20 30 40] [ 4 3 2 1]]
print("vstack 水平追加")
print(np.hstack((lst1,lst2)))#[10 20 30 40 4 3 2 1]
print("split 分成等份")
print(np.split(lst1,2)) #[array([10, 20]), array([30, 40])]
print("copy 拷贝")
print(np.copy(lst1)) #[10 20 30 40]
if __name__=="__main__":
main()