#NumPy数据库学习
#Numpy包含一下特点:
'''
1.强大的N维数组对象。
2.成熟的函数库。
3.用于集成c/c++和Fortran代码工具
4.实用的线性代数,傅里叶变换和随机生成函数。
'''
import numpy as np
#4.1:属性
array = np.array([[1,2,3],[4,5,6]])#将列表转换为矩阵,并转换为int类型
print(array)
print('array of dim is',array.ndim)#矩阵的维度
print('array of shape is',array.shape)#矩阵的行数和列数
print('array of size is',array.size)#矩阵元素个数
#4.2 :numpy:numpy创建Array
1,array:创建数组
2,dtype:指定数据类型
3,zeros:创建数据全为零
4,ones:创建数据全为一
5,empty:创建数据接近零
6,arange:指定范围内创建数据
7,linspace:创建线段
#创建数组
a = np.array([1,2,3])
print(a)
#指定数据dtype
a = np.array([1,2,3],dtype=np.int)#指定为int形
print(a.dtype)
b = np.array([1,2,3,4],dtype=np.float)#指定为浮点型
print(b.dtype)
#创建特定数据
a = np.array([[1,2,3],[4,5,6]])#创建特定数据
print(a)
#创建全0数组
a = np.zeros((2,3))#全0两行三列
print(a)
#创建全1数组,指定特定类型int
a = np.ones((2,3),dtype=np.int)
print(a)
#创建全空数组 每个数值接近0
a = np.empty([2,3])
print(a)
#array创建连续数组
a = np.arange(1,10,3)#1到10,步长为3
print(a)
#reshape改变数据形状
a = np.arange(6).reshape(2,3)
print(a)
#用linespace创建线段型数据
a = np.linspace(1,10,20)#1开始,10结束,创建10个数据
print(a)
#4.3 NumPy基础运算
#基础运算只加减乘除
a = np.array([10,20,30,40])
b = np.arange(4)
print(b)
c = a+b#加法运算
print(c)
d = a-b
print(d)#减法运算
e = 10*np.sin(a)#三角函数运算
print(e)
print(b<3)#逻辑判断
f = np.random.random([2,3])#随机生成两行三列的举证
print(f)
g = np.sum(b)#函数求和
print(g)
h = np.max(b)#求元素最大值最小值
i = np.min(b)
print(h)
print(i)
#多维数矩阵运算
a = np.array([[1,2],[3,4]])
print(a)
b = np.arange(4).reshape(2,2)
print(b)
c = a.dot(b)#c = dot(a,b) 矩阵相乘相乘计算
print(c)
#对行或列进行查找运算
a = np.array([[1,2],[3,4]])
print(np.max(a,axis=0))#按行求和最大值
print(np.max(a,axis=1))#按列求和最大值
print(np.min(a,axis=0))
print(np.min(a,axis=1))
#矩阵索引操作
a = np.arange(2,14).reshape(3,4)
print(a)
print(np.argmax(a))#矩阵中最大元素的索引
print(np.argmin(a))#矩阵中最小元素的索引
print(np.mean(a))#求解矩阵均值
print(np.average(a))
print(np.cumsum(a))#矩阵累加函数
print(np.diff(a))#矩阵累差函数
print(np.nonzero(a))#将非0元素的行与列坐标分割开来
#矩阵的排序转置替换
a = np.arange(14,2,-1).reshape(3,4)
print(a)
print(np.sort(a))#排序
print(np.transpose(a))#转置
print(np.clip(a,5,9))#判断当前矩阵元素是否比最小值小或比最大值大,若是则替换
#一维索引
a = np.arange(0,12)
print(a)
print(a[1])
b = np.arange(0,12).reshape(3,4)
print(b)
print(b[1])#第二行
#二维索引
a = np.arange(0,12).reshape(3,4)
print(a)
print(a[1,1])
print(a[1,1:3])#切片处理
for row in a:
print(row)
for col in a:
print(col)
for item in a.flat:
print(item)
#array置array合并
a = np.array([1,1,1])
b = np.array([2,2,2])
print(np.vstack((a,b)))#上下合并
print(np.hstack((a,b)))#左右合并
#增加维度
a = np.array([1,1,1])
print(a.shape)
print(a[np.newaxis,:])
print(a[np.newaxis].shape)#newaxis增加维度
print(a[:,np.newaxis])
print(a[:,np.newaxis].shape)
#多矩阵合并
a = np.array([1,1,1])[:,np.newaxis]
b = np.array([2,2,2])[:,np.newaxis]
print(np.concatenate((a,b,b,a),axis=0))#表示上下合并
print(np.concatenate((a,b,b,a),axis=1))
#矩阵分割
a = np.arange(0,12).reshape(3,4)
print(a)
print(np.split(a,3,axis=0))#横向分割三部分np.vsplit(a,3)
print(np.split(a,2,axis=1))#竖向分割三部分
print(np.array_split(a,3,axis=1))#不等量分割三部分
#copy 与 deep copy
= 具有关联性
a = np.arange(4)
b = a
c = a
d = b
print(b is a)
d[0] = 5
print(a)
#copy赋值方法没有关联性
a = np.arange(4)#deep copy
print(a)
b = a.copy()
print(b)
print(a)
b[0] = 5
print(b)
print(a)