机器学习Numpy

🌞欢迎来到机器学习的世界 
🌈博客主页:卿云阁 

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于练气阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2021年3月15日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

🍈 一、创建数组

1.基本介绍

2.创建数组

3.数组

3.数组结构

4.数组类型

5.数值运算

6.排序操作

7.数组形状操作

8.数组生成函数

9.常用的生成函数

10.NumPy 算术函数

10.随机模块

11.文件读写和保存

12.数组保存

🍈 一、创建数组

1.基本介绍

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

NumPy Ndarray 对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

ndarray 中的每个元素在内存中都有相同存储大小的区域。

2.创建数组

1.通过arry函数创建数组

import numpy as np 
a = np.array([[1,  2],  [3,  4]])
print(type(a))
print (a)
print (a[1])
结果:
<class 'numpy.ndarray'>
[[1 2]
 [3 4]]
[3 4]

2.通过arange()、linspace()、logspace()创建数组

import numpy as np
a=np.arange(0,10,2)
a
#array([0, 2, 4, 6, 8])
b=np.linspace(0,2*np.pi,10)
b
#array([0.        , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 ,
       3.4906585 , 4.1887902 , 4.88692191, 5.58505361, 6.28318531])
c=np.logspace(0,2,10)
c
#array([  1.        ,   1.66810054,   2.7825594 ,   4.64158883,
         7.74263683,  12.91549665,  21.5443469 ,  35.93813664,
        59.94842503, 100.        ])

(1)linspace(),可用来创建等差数列

(2)logspace(),可用来创建等比数列

3.数组

zhang_list=[1,2,3,4,5]#对于ndarray结构来说,里面的元素必须是同一类型,如果不是,会自动地向下进行转化
zhang_array=np.array(zhang_list)
zhang_array
结果:
array([1., 2., 3., 4., 5.])

type(zhang_array)
结果:
numpy.ndarray

zhang_array.dtype
结果:
dtype('int32')

zhang_array.itemsize   #一个整形占的字节数
结果:
8

zhang_array.shape   #数组的维度,对于矩阵,n 行 m 列
结果:
(5,)

zhang_array.size    #数组元素的总个数,相当于 .shape 中 n*m 的值
结果:
5

zhang_array.ndim #轴的数量或维度的数量
结果:
1

zhang_array.fill(0)
zhang_array
结果:
array([0., 0., 0., 0., 0.])

zhang_list=[1,2,3,4,5]#对于ndarray结构来说,里面的元素必须是同一类型,如果不是,会自动地向下进行转化
zhang_array=np.array(zhang_list)
zhang_array
结果:
array([1, 2, 3, 4, 5])

zhang_array[0]#索引
结果:
1

zhang_array[1:3] #切片
结果:
array([2, 3])


3.数组结构

zhang_array=np.array([[1,2,3],   
                    [4,5,6],
                    [7,8,9]])
zhang_array
结果:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

zhang_array.size 
结果:
9

zhang_array[1,1]     #取元素
结果:
5

zhang_array[1]  #取行
结果:
array([ 4, 10,  6])

zhang_array[:,1]   #取列
结果:
array([ 2, 10,  8])

zhang_array2=zhang_array #指向的是同一个位置
zhang_array2=zhang_array.copy#指向的不同的位置

zhang_array=np.arange(0,100,10)  #等差数组
zhang_array
结果:
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

random_array=np.random.rand(10) #随机数
random_array
结果:
array([0.87101319, 0.76531048, 0.72086224, 0.05751785, 0.09925279,
       0.44513263, 0.64892437, 0.32617306, 0.79782336, 0.79721813])

zhang_array=np.array([10,20,30,40,50])
zhang_array>30
结果:
array([False, False, False,  True,  True])

np.where(zhang_array>30)
结果:
(array([3, 4], dtype=int64),)

zhang_array[np.where(zhang_array>30)]
结果:
array([40, 50])

4.数组类型

zhang_array=np.array([1,2,3,4,5],dtype=np.float32)
zhang_array


结果:
array([1., 2., 3., 4., 5.], dtype=float32)

5.数值运算

zhang_array=np.array([[1,2,3],   
                    [4,5,6],
                    ])
zhang_array

结果:
array([[1, 2, 3],
       [4, 5, 6]])


np.sum(zhang_array)
结果:
21

#指定要进行的操作沿着什么维度
np.sum(zhang_array,axis=0)  
结果:
array([5, 7, 9])


zhang_array.ndim
结果:
2

np.sum(zhang_array,axis=1)  #求和
结果:
array([ 6, 15])

zhang_array.sum(axis=1) 
结果:
array([ 6, 15])

zhang_array.prod() #乘积
结果:
720

zhang_array.max() #最值
结果:
6

zhang_array.argmax()#最大值的位置
结果:
5

zhang_array.argmax() #均值
结果:
5

zhang_array.std() #标准差
结果:
1.707825127659933

zhang_array.var() #标准差
结果:
2.9166666666666665

zhang_array.clip(2,4)#小于2的数变成2,大于4的数变成4
结果:
array([[2, 2, 3],
       [4, 4, 4]])

zhang_array.round(decimals=1)#四舍五入,精确到小数点后一位
结果:
array([[1, 2, 3],
       [4, 5, 6]])

6.排序操作

import numpy as np 
zhang_array= np.array([[1.5,1.3,7.5 ],
              [5.6,7.8,1.2 ]])
zhang_array
结果:
array([[1.5, 1.3, 7.5],
       [5.6, 7.8, 1.2]])

np.sort(zhang_array)
结果:
array([[1.3, 1.5, 7.5],
       [1.2, 5.6, 7.8]])

np.argsort(zhang_array)
结果:
array([[1, 0, 2],
       [2, 0, 1]], dtype=int64)

zhang_array= np.linspace(0,10,10)
zhang_array 
结果:
array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,
        5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ])

value=np.array([2.5,6.5,9.5]) 
np.searchsorted(zhang_array,value)#value应插入的位置
结果:
array([3, 6, 9], dtype=int64)

zhang_array=np.array([[1,0,6],
                   [1,7,0],
                    [2,3,1],
                         [2, 4, 0]])
zhang_array
结果:
array([[1, 0, 6],
       [1, 7, 0],
       [2, 3, 1],
       [2, 4, 0]])

index=np.lexsort([-1*zhang_array[:,0],zhang_array[:,2]])
index
结果:
array([3, 1, 2, 0], dtype=int64)

index=zhang_array[index]  #第一列升序,第三列降序
zhang_array
结果:
array([[1, 0, 6],
       [1, 7, 0],
       [2, 3, 1],
       [2, 4, 0]])

7.数组形状操作

import numpy as np 
zhang_array= np.arange(10)
zhang_array
结果:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

zhang_array.shape
结果:
(10,)

zhang_array.shape=2,5  #2行5列,大小不能改变
zhang_array
结果:
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

zhang_array.reshape(1,10)
结果:
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

zhang_array= np.arange(10)
zhang_array.shape
结果:
(10,)

zhang_array=zhang_array[:,np.newaxis]#增加轴
zhang_array.shape
结果:
(10, 1)

zhang_array=zhang_array.squeeze()#减少轴
zhang_array.shape
结果:
(10,)

zhang_array.shape=2,5 
zhang_array
结果:
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

zhang_array.transpose()#转置
array([[0, 5],
       [1, 6],
       [2, 7],
       [3, 8],
       [4, 9]])

zhang_array#原始未改变
结果:
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

#连接
a=np.array([1,2,3])
b=np.array([4,5,6])
c=np.concatenate((a,b))
c
结果:
array([1, 2, 3, 4, 5, 6])

c.shape
结果:
(6,)

np.hstack((a,b))
结果:
array([1, 2, 3, 4, 5, 6])

np.vstack((a,b))
结果:
array([[1, 2, 3],
       [4, 5, 6]])

#原始数组的拉平
a.ravel()
结果:
array([1, 2, 3])

8.数组生成函数

import numpy as np 
zhang_array= np.arange(2,20,2)
zhang_array
结果:
array([ 2,  4,  6,  8, 10, 12, 14, 16, 18])

zhang_array= np.linspace(0,10,10)#平均距离
zhang_array
结果:
array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,
        5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ])

zhang_array= np.logspace(0,1,5)#默认以十为底
zhang_array
结果:
array([ 1.        ,  1.77827941,  3.16227766,  5.62341325, 10.        ])

9.常用的生成函数

np.zeros(3)
结果:
array([0., 0., 0.])

np.zeros((3,3))
结果:
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

np.ones((3,3))
结果:
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

a=np.empty(6)
a.shape
结果:
(6,)

a.fill(1)
a
结果:
array([1., 1., 1., 1., 1., 1.])

np.ones_like(a)
结果:
array([1., 1., 1., 1., 1., 1.])

np.identity(5)
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

10.NumPy 算术函数

import numpy as np 
 
a = np.arange(9, dtype = np.float_).reshape(3,3)  
print ('第一个数组:')
print (a)
print ('\n')
print ('第二个数组:')
b = np.array([10,10,10])  
print (b)
print ('\n')
print ('两个数组相加:')
print (np.add(a,b))
print ('\n')
print ('两个数组相减:')
print (np.subtract(a,b))
print ('\n')
print ('两个数组相乘:')
print (np.multiply(a,b))
print ('\n')
print ('两个数组相除:')
print (np.divide(a,b))


结果:
第一个数组:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]


第二个数组:
[10 10 10]


两个数组相加:
[[10. 11. 12.]
 [13. 14. 15.]
 [16. 17. 18.]]


两个数组相减:
[[-10.  -9.  -8.]
 [ -7.  -6.  -5.]
 [ -4.  -3.  -2.]]


两个数组相乘:
[[ 0. 10. 20.]
 [30. 40. 50.]
 [60. 70. 80.]]


两个数组相除:
[[0.  0.1 0.2]
 [0.3 0.4 0.5]
 [0.6 0.7 0.8]]

10.随机模块

(1)生成m行列的矩阵(所有的值都是从0到1的)

import numpy as np #所有的值都是从0到1的
np.random.rand(3,2)




结果:
array([[0.02191337, 0.75211679],
       [0.3368873 , 0.12833534],
       [0.25595601, 0.60613353]])

(2)返回一个数

np.random.rand()#返回一个数
结果:
0.885484190404924

(3)返回随机样本

np.random.random_sample()#返回随机样本
结果:
0.050287016652027394

(4)0-10中找三个数

np.random.randint(0,10,3)#0-10中找三个数
结果:
array([8, 8, 9])

(5)设置精度

np.set_printoptions(precision=3)#设置精度
mu,sigma=0,0.1
np.random.normal(mu,sigma,10)
结果:
array([-0.131,  0.058, -0.062,  0.023, -0.104,  0.188, -0.123, -0.023,
       -0.14 , -0.033])

(6)洗牌

#洗牌
zhang_array=np.arange(10)
zhang_array
np.random.shuffle(zhang_array)
zhang_array
结果:
array([3, 7, 5, 2, 6, 1, 9, 4, 0, 8])

(7)随机数种子

#随机的种子
np.random.seed(1) #指定之后不变
mu,sigma=0,0.1
np.random.normal(mu,sigma,10)
结果:

array([ 0.162, -0.061, -0.053, -0.107,  0.087, -0.23 ,  0.174, -0.076,
        0.032, -0.025])

11.文件读写和保存

import numpy as np 
%%writefile zhang.txt
1 2 3 4 5 6
2 3 5 8 7 9
结果:
Writing zhang.txt

data=np.loadtxt('zhang.txt')
data

结果:
array([[1., 2., 3., 4., 5., 6.],
       [2., 3., 5., 8., 7., 9.]]

*zhang.txt;最好和路径放在一起
*skiprows:去掉几行
*delimiter=',':分隔符
*usecols=(0,1,4):指定使用那几行

np.savetxt('zhang3.txt',zhang_array,fmt='%d')#保存成整数的格式

12.数组保存

#读写arry结构
zhang_array=np.array([[1,2,3],[4,5,6]])
np.save('zhang_array.npy',zhang_array)

zhang=np.load('zhang_array.npy')
zhang
结果:
array([[1, 2, 3],
       [4, 5, 6]])

 多个数组的压缩保存

zhang_array2=np.arange(10)
np.savez('zhang_array.npz',a=zhang_array,b=zhang_array2)#多个数组的压缩保存
data=np.load('zhang_array.npz')

data['a']
结果:
array([[1, 2, 3],
       [4, 5, 6]])


data['b']
结果:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

🍍二、Numpy教程

https://www.runoob.com/numpy/numpy-tutorial.htmlhttps://www.runoob.com/numpy/numpy-tutorial.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卿云阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值