import numpy
import numpy as np #导库时可以起别名,
#第一个参数表示当前的数据存在于什么位置,delimiter表示源数据的属性的分隔符,dtype表示默认读的值类型
world_alcohol=numpy.genfromtxt("E:/spyworkspace/numpy_learn1/world_alcohol.txt",delimiter=",",dtype=str)
print(type(world_alcohol))
print(world_alcohol)
#help帮助文档
#rint(help(numpy.genfromtxt))
vector=numpy.array([5,10,15,20])
print(vector)
print(vector.shape)
matrix=numpy.array([[5,10,15],[20,25,30],[35,40,45]])
print(matrix)
print(matrix.shape)
#numpy.array里面的元素必须是同一类型的
#numbers=numpy.array([1,2,3,4])
#numbers=numpy.array([1,2,3,4.0])
numbers=numpy.array([1,2,3,'4'])
print(numbers)
print(numbers.dtype)
#numpy取数据
uruguary_other_1986=world_alcohol[2,4]
third_country=world_alcohol[2,2]
print(uruguary_other_1986)
print(third_country)
#切片
print(vector[0:3]) #左闭右开,取0,1,2不包括3
#取第一列
print(matrix[:,0]) #:表示取所有的
#取两列同样可以用切片,同样,取某些行和列也可以用切片
print(matrix[:,0:2])
#numpy中的计算
#1.判断向量中是否有一个值等于给定值,矩阵亦如此
print(vector==10)
print(matrix==25)
equal_to_ten=(vector==10)
print(equal_to_ten)
print(vector[equal_to_ten])
second_column_25=(matrix[:,1]==25)
print(second_column_25)
print(matrix[second_column_25,:])#bool类型可以拿出来当成索引
#与或操作
equal_to_ten_and_five=(vector==10)&(vector==5)
print(equal_to_ten_and_five)
equal_to_ten_or_five=(vector==10)|(vector==5)
print(equal_to_ten_or_five)
#2.对整体的array进行值类型的改变
temp=numpy.array(["1","2","3"])
print(temp.dtype)
print(temp)
temp=temp.astype(float)
print(temp.dtype)
print(temp)
#3.求极值操作
print(vector.min())
print(vector.max())
#若想了解更多的属性可以查看帮助文档print(help(numpy.array))
#4.求和
print(matrix.sum(axis=1)) #axis定义维度 1对行求和 0对列求和
print(matrix.sum(axis=0))
#numpy常用函数
print(np.arange(15))
#将向量形式转换成矩阵形式
a=np.arange(15).reshape(3,5)
print(a)
#查看维度ndim
print(a.ndim)
print(a.size)
#初始化一个矩阵,让其值都为0
print(np.zeros((3,4)))
print(np.ones((2,3,4),dtype=np.int32)) #dtype指定元素类型
#构造一组序列
print(np.arange(10,30,5)) #从10开始不超过30,步长为5
#numpy当中的随机模块
print(np.random.random((2,3)))
#linspace指定一个区间,在区间上得到n个数,间隔平均
from numpy import pi
print(np.linspace(0,2*pi,100))
a=np.array([20,30,40,50])
b=np.arange(4)
print(a)
print(b)
c=a-b
print(c)
c=c-1
print(c)
print(b**2) #每一个元素进行平方
print(a<35)
#矩阵乘法相关
A=np.array([[1,1],[0,1]])
B=np.array([[2,0],[3,4]])
print(A)
print('--------')
print(B)
print('--------')
print(A*B)
print('--------')
print(A.dot(B)) #矩阵乘法
print('--------')
print(np.dot(A,B)) #矩阵乘法
#矩阵常用操作
B=np.arange(3)
print(B)
print(np.exp(B)) #e的B次幂
print(np.sqrt(B)) #开根号
a=np.floor(10*np.random.random((3,4))) #floor向下取整
print(a)
#将一个矩阵拉成一个向量
print(a.ravel())
a.shape=(6,2)
print(a)
print(a.T) #将a进行转置
print(a.reshape(3,-1))
#关于矩阵的拼接
a=np.floor(10*np.random.random((2,2)))
b=np.floor(10*np.random.random((2,2)))
print(a)
print(b)
print(np.hstack((a,b))) #横着拼
print(np.vstack((a,b))) #竖着拼
#关于矩阵数据的切分
a=np.floor(10*np.random.random((2,12))).astype(int)
print(a)
print(np.hsplit(a,3)) #将a切分成3份
#在指定位置进行切分
print(np.hsplit(a,(3,4)))
a=np.floor(10*np.random.random((12,2))).astype(int)
print(a)
print(np.vsplit(a,3))
#不同复制操作对比
a=np.arange(12)
b=a #指向同一块内存
print(b is a)
b.shape=(3,4)
print(a.shape)
print(id(a))
print(id(b))
#指向不同,但共用一套值
c=a.view()
print(c is a)
c.shape=(2,6)
print(a.shape)
c[0,4]=1234
print(a)
print(id(a))
print(id(c))
#深复制
d=a.copy()
print(d is a)
d[0,0]=9999
print(d)
print(a)
data=np.sin(np.arange(20)).reshape(5,4)
print(data)
ind=data.argmax(axis=0) #1行 0列 按列来算,找出每列值最大的索引
print(ind)
data_max=data[ind,range(data.shape[1])]#按列找出每一列最大值
print(data_max)
#tile操作
a=np.arange(0,40,10)
print(a)
b=np.tile(a,(3,5)) #行和列变成原来相应的倍数
print(b)
#排序操作
a=np.array([[4,3,5],[1,2,1]])
print(a)
b=np.sort(a,axis=1)
print(b)
a.sort(axis=1)
print(a)
a=np.array([4,3,1,2])
j=np.argsort(a)
print(j)
print(a[j])