python机器学习与数据分析实战笔记——numpy基础

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]

猜你喜欢

转载自blog.csdn.net/qq_44589327/article/details/105883307