numpy基础结构
import numpy as np
number=np.array([1,2,3,4])
world_alcohol=np.genfromtxt(r'F:\唐宇迪机器学习资料\机器学习\Python库代码(4个)\1-科学计算库numpy\world_alcohol.txt',\
delimiter=',',dtype=str)
print(world_alcohol)
[['Year' 'WHO region' 'Country' 'Beverage Types' 'Display Value']
['1986' 'Western Pacific' 'Viet Nam' 'Wine' '0']
['1986' 'Americas' 'Uruguay' 'Other' '0.5']
...
['1987' 'Africa' 'Malawi' 'Other' '0.75']
['1989' 'Americas' 'Bahamas' 'Wine' '1.5']
['1985' 'Africa' 'Malawi' 'Spirits' '0.31']]
其中delimiter设定分割的符号,dtype用于设置读入的类型
print(type(world_alcohol))
#print(help(np.genfromtxt))#查看帮助文档有实例可以查询
<class 'numpy.ndarray'>
#列表生成numpy的array形式
vector=np.array([1,2,3,4,5])
print(vector)
print(vector.shape)#输出vector的规模
[1 2 3 4 5]
(5,)
#如果向写成一个多维的,那么将list写成一个多维的即可如下所示:
matrix=np.array([[1,2,3],[1,2,3]])
print(matrix)
print(matrix.shape)
[[1 2 3]
[1 2 3]]
(2, 3)
numpy的array中必须都是相同的结构实例如下
numbers=np.array([1,2,3,4.0])#把最后一个改为4.0后
print(numbers)
print(numbers.dtype)
[1. 2. 3. 4.]
float64
会发现输出的是’float64’
numbers=np.array([1,2,3,'4'])#把最后一个改为4.0后
print(numbers)
print(numbers.dtype)
['1' '2' '3' '4']
<U11
#array索引是从0开始的,如果索引值则如下
world_alcohol[1,4]
'0'
#基于切片进行索引
matirx=np.array([[1,2,3],[20,21,22],[1,5,6]])
print(matirx[:,0:2])#取所有行的第0到1列
[[ 1 2]
[20 21]
[ 1 5]]
#逻辑判断
vector1=np.array([5,10,15,20])
vector1==10
array([False, True, False, False])
返回的是同维的矩阵,类型为布尔类型
#将布尔矩阵当为索引
equal_to_ten=(vector1==10)
print(equal_to_ten)
print(vector1[equal_to_ten])
[False True False False]
[10]
#python进行与和或判断
vector1=np.array([5,10,15,20])
equal_5_10=(vector1==5) & (vector1==10)
equal_5_or10=(vector1==5) | (vector1==10)
print(equal_5_10)
print(equal_5_or10)
[False False False False]
[ True True False False]
#numpy进行类型转换
vector1=np.array(['1','2','3'])
print(vector1.dtype)
vector2=vector1.astype(float)
print(vector2)
print(vector2.dtype)
<U1
[1. 2. 3.]
float64
#对矩阵求最值
matirx=np.array([[1,2,3],[20,21,22],[1,5,6]])
print(np.amin(matirx))
print(np.amin(matirx,axis=0))#对列求
print(np.amin(matirx,axis=1))#对行求
1
[1 2 3]
[ 1 20 1]
numpy常用函数
import numpy as np
b=np.arange(15)
a=b.reshape(3,5)
print(a)
print(b)
a.ndim#矩阵维数
a.shape
a.dtype.name#类型
a.size
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
15
reshape()改变矩阵维数,3行5列
#构造全为同值矩阵
print(np.ones((2,2)))
print(np.zeros((2,2)))
[[1. 1.]
[1. 1.]]
[[0. 0.]
[0. 0.]]
#随机模块
np.random.random((2,3))#默认在0,1之间产生随机数
array([[0.53849548, 0.6483247 , 0.19304272],
[0.37104579, 0.17427307, 0.45138999]])
#linspace
np.linspace(0,2*np.pi,10)
array([0. , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 ,
3.4906585 , 4.1887902 , 4.88692191, 5.58505361, 6.28318531])
#矩阵的点乘与叉乘
a=np.array([[1,2],[3,4]])
b=np.array([[0,1],[0,0]])
print(a*b)
print(a.dot(b))
[[0 2]
[0 0]]
[[0 1]
[0 3]]
常用操作
#floor向下取整
import numpy as np
a=np.floor(np.arange(10).reshape((2,5))*np.random.random(1))
print(a)
[[0. 0. 1. 2. 3.]
[4. 5. 6. 7. 8.]]
a.ravel()#把矩阵变为一行
array([0., 0., 1., 2., 3., 4., 5., 6., 7., 8.])
#转置a.T
#如果不想对矩阵reshape变换计算可以用-1代替即可如下
a.reshape(5,-1)
array([[0., 0.],
[1., 2.],
[3., 4.],
[5., 6.],
[7., 8.]])
#矩阵拼接
a=np.arange(4)
b=np.arange(1,5)
print(np.hstack((a,b)))#水平拼接
print(np.vstack((a,b)))#垂直拼接
[0 1 2 3 1 2 3 4]
[[0 1 2 3]
[1 2 3 4]]
#numpy复制操作
a=np.arange(12)
b=a
print(b is a)
print(id(a))
print(id(b))#这里赋值其实就相当于是给了a一个别名
True
2762874202912
2762874202912
c=a.view()#相当于是一个潜复制
print(c is a)
c.shape=2,6
print(a.shape)
print(c.shape)
print(a)
print(id(a))
print(id(c))
False
(12,)
(2, 6)
[ 0 1 2 3 4 5 6 7 8 9 10 11]
2762874202912
2762868859008
这里理解就是id不一样,但是二者公用的是一套值
#如果要完整复制且两个变量没有关系
d=a.copy()
d is a
d[0]=999
print(d)
print(a)
[999 1 2 3 4 5 6 7 8 9 10 11]
[ 0 1 2 3 4 5 6 7 8 9 10 11]
#讲解排序与索引
data=np.sin(np.arange(20).reshape(5,4))
print(data)
ind=data.argmax(axis=0)
print(ind)#返回最大值所在的行即索引
data_max=data[ind,range(data.shape[1])]
print(data_max)#对最大值进行求取
[[ 0. 0.84147098 0.90929743 0.14112001]
[-0.7568025 -0.95892427 -0.2794155 0.6569866 ]
[ 0.98935825 0.41211849 -0.54402111 -0.99999021]
[-0.53657292 0.42016704 0.99060736 0.65028784]
[-0.28790332 -0.96139749 -0.75098725 0.14987721]]
[2 0 3 1]
[0.98935825 0.84147098 0.99060736 0.6569866 ]
a=np.arange(0,40,10)
print(a)
b=np.tile(a,(3,5))
print(b)#相当于把a复制成了3行5列
[ 0 10 20 30]
[[ 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30]
[ 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30]
[ 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30]]
#排序
#argsort(a)对排序后的结果求其在排序前的索引
a=np.array([5,2,6,4])
j=np.argsort(a)
print(a)
print(j)
print(a[j])
[5 2 6 4]
[1 3 0 2]
[2 4 5 6]