公众号:尤而小屋
作者:Peter
编辑:Peter

大家好,我是Peter~

开始更新numpy相关的文章,本文介绍numpy中的25个小案例,主要内容是如何利用numpy来生成向量(一维数组),矩阵和高维数组等

numpy介绍

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

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

  • 一个强大的N维数组对象 ndarray

  • 广播功能函数

  • 整合 C/C++/Fortran 代码的工具

  • 线性代数、傅里叶变换、随机数生成等功能

导入numpy

import numpy as np

打印numpy的版本和配置信息

print(np.version)
<module 'numpy.version' from '/Applications/downloads/anaconda/anaconda3/lib/python3.7/site-packages/numpy/version.py'>
print(np.show_config)
<function show at 0x1060cc560>

查看函数帮助文档

# np.info(np.abs)

创建0向量

np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((5,2))
array([[0., 0.],[0., 0.],[0., 0.],[0., 0.],[0., 0.]])
np.zeros((2,2,3))
array([[[0., 0., 0.],[0., 0., 0.]],[[0., 0., 0.],[0., 0., 0.]]])

改变0向量指定位置的值

z = np.zeros((3,4))
z
array([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]])
z[2,3] = 1
z[1,1] = 2z
array([[0., 0., 0., 0.],[0., 2., 0., 0.],[0., 0., 0., 1.]])

找到非0的值

np.nonzero(z)
(array([1, 2]), array([1, 3]))

创建全1向量、数组

np.ones(6)
array([1., 1., 1., 1., 1., 1.])
np.ones((3,2))
array([[1., 1.],[1., 1.],[1., 1.]])
np.ones([2,3,2])
array([[[1., 1.],[1., 1.],[1., 1.]],[[1., 1.],[1., 1.],[1., 1.]]])

创建单位矩阵-eye

np.eye(4)
array([[1., 0., 0., 0.],[0., 1., 0., 0.],[0., 0., 1., 0.],[0., 0., 0., 1.]])
np.eye(4,dtype=int)
array([[1, 0, 0, 0],[0, 1, 0, 0],[0, 0, 1, 0],[0, 0, 0, 1]])

自定义数据类型

np.ones([2,3])  # 默认是浮点数
array([[1., 1., 1.],[1., 1., 1.]])
np.ones([2,3],dtype=int)  # 指定为int类型
array([[1, 1, 1],[1, 1, 1]])

列表转数组

lst = [1,2,3,4]np.array(lst)
array([1, 2, 3, 4])
# 指定数组类型lst = [1,2,3,4]
np.array(lst, dtype=float)
array([1., 2., 3., 4.])

嵌套列表转数组

lst1 = [[1,2,3],[4,5,6]]np.array(lst1)
array([[1, 2, 3],[4, 5, 6]])
# 指定数据类型lst1 = [[1,2,3],[4,5,6]]np.array(lst1, dtype=float)
array([[1., 2., 3.],[4., 5., 6.]])

元组转数组

t1 = (9,8,7)
np.array(t1)
array([9, 8, 7])

嵌套元组转数组

t2 = ((9,8,7),(6,5,4))
np.array(t2)
array([[9, 8, 7],[6, 5, 4]])

列表和元组混合

lt = [(1,2,3),(7,8,9)]np.array(lt)
array([[1, 2, 3],[7, 8, 9]])

迭代器转数组

range_number = range(3,8)np.array(range_number)
array([3, 4, 5, 6, 7])
# 指定类型range_number = range(3, 8)
np.array(range_number, dtype=float)
array([3., 4., 5., 6., 7.])

特殊矩阵1

边界值为1,其他为0

b = np.ones([6,6])
b
array([[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.]])
b[1:-1,1:-1] = 0b
array([[1., 1., 1., 1., 1., 1.],[1., 0., 0., 0., 0., 1.],[1., 0., 0., 0., 0., 1.],[1., 0., 0., 0., 0., 1.],[1., 0., 0., 0., 0., 1.],[1., 1., 1., 1., 1., 1.]])

特殊矩阵2

用0填充矩阵的边界

c = np.ones((6,6))
c
array([[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.]])
np.pad(c,pad_width=1,mode="constant",constant_values=0)
array([[0., 0., 0., 0., 0., 0., 0., 0.],[0., 1., 1., 1., 1., 1., 1., 0.],[0., 1., 1., 1., 1., 1., 1., 0.],[0., 1., 1., 1., 1., 1., 1., 0.],[0., 1., 1., 1., 1., 1., 1., 0.],[0., 1., 1., 1., 1., 1., 1., 0.],[0., 1., 1., 1., 1., 1., 1., 0.],[0., 0., 0., 0., 0., 0., 0., 0.]])

特殊矩阵3

6*6的矩阵,对角线下方的值为1,2,3,4,5

np.diag(1 + np.arange(5), k=-1)
array([[0, 0, 0, 0, 0, 0],[1, 0, 0, 0, 0, 0],[0, 2, 0, 0, 0, 0],[0, 0, 3, 0, 0, 0],[0, 0, 0, 4, 0, 0],[0, 0, 0, 0, 5, 0]])

np.arange函数

numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数使用方法为:

numpy.arange(start, stop, step, dtype)
  • start:起始值,默认为0

  • stop:终止值,不包含

  • step:步长,默认为1

  • dtype:返回数组的数据类型

np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 指定步长
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
# 指定类型
np.arange(0,10,2,dtype=float)
array([0., 2., 4., 6., 8.])

创建随机数组

np.random.random((2,3,2))
array([[[0.56045087, 0.15566786],[0.34963774, 0.51837142],[0.68895046, 0.04980068]],[[0.98352437, 0.47189043],[0.30430488, 0.49057744],[0.20020709, 0.90466043]]])

Pandas数据转数组

import pandas as pd
s = pd.Series([1,2,3,4])np.array(s)
array([1, 2, 3, 4])
d = pd.DataFrame([[1,2,3,4],[9,8,7,6]])np.array(d)
array([[1, 2, 3, 4],[9, 8, 7, 6]])

反转数组

ten = np.arange(10)
ten
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
ten[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

reshape函数

主要是用来改变数组的形状

arr = np.arange(16)
arr
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])
arr.shape
(16,)
arr.reshape((4,4))
array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15]])
arr.reshape((2,8))
array([[ 0,  1,  2,  3,  4,  5,  6,  7],[ 8,  9, 10, 11, 12, 13, 14, 15]])
arr.reshape((8,2))
array([[ 0,  1],[ 2,  3],[ 4,  5],[ 6,  7],[ 8,  9],[10, 11],[12, 13],[14, 15]])
arr.reshape((1,16))
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15]])

我们需要特别注意-1的使用,numpy会自动生成相应的shape值

arr.reshape((8,-1))
array([[ 0,  1],[ 2,  3],[ 4,  5],[ 6,  7],[ 8,  9],[10, 11],[12, 13],[14, 15]])
arr.reshape((-1,8))
array([[ 0,  1,  2,  3,  4,  5,  6,  7],[ 8,  9, 10, 11, 12, 13, 14, 15]])

np.linspace函数

用于构建一个等差数列的数组,使用方法为:

np.linspace(start,  # 起始值stop,  # 终止值,如果endpoint为true,该值包含于数列中num=50,  # 生成的样本量,默认为50endpoint=True,  #是否包含末尾的值;默认为Trueretstep=False,  #  为True时,生成的数组中会显示间距,反之不dtype=None  # 数据类型
)
np.linspace(1,10,5)
array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ])

可以不包含末尾的数值:

np.linspace(1,10,5,endpoint=False)
array([1. , 2.8, 4.6, 6.4, 8.2])

全部是1的等差数列:

# 全部是1的等差数列
np.linspace(1,1,10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

加上restep参数,则会显示步长:

np.linspace(1,10,5,retstep=True)
(array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ]), 2.25)

np.logspace函数

主要是用于生成等比数列,使用方法为:

np.logspace(start, # base ** start(指数)stop, # base ** stop;如果endpoint为true,该值包含于数列中num=50, endpoint=True, base=10.0,  # 默认底数为10dtype=None
)
np.logspace(1,5,num=10)
array([1.00000000e+01, 2.78255940e+01, 7.74263683e+01, 2.15443469e+02,5.99484250e+02, 1.66810054e+03, 4.64158883e+03, 1.29154967e+04,3.59381366e+04, 1.00000000e+05])

指定不同的底数;第一个数为2的0次方,为1:

np.logspace(0,8,num=10,base=2)
array([  1.        ,   1.85174942,   3.42897593,   6.34960421,11.75787594,  21.77264   ,  40.3174736 ,  74.65785853,138.24764658, 256.        ])
往期精彩回顾适合初学者入门人工智能的路线及资料下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载本站qq群955171419,加入微信群请扫码:

【Python】机器学习矩阵运算必学库Numpy首秀!相关推荐

  1. Python机器学习、深度学习库总结(内含大量示例,建议收藏)

    Python机器学习.深度学习库总结(内含大量示例,建议收藏) 前言 python常用机器学习及深度学习库介绍 总结与分类 python 常用机器学习及深度学习库总结 分类 更多 前言 目前,随着人工 ...

  2. Python机器学习、深度学习库总结

    Python机器学习.深度学习库总结(内含大量示例,建议收藏) 前言 python常用机器学习及深度学习库介绍 总结与分类 python 常用机器学习及深度学习库总结 分类 更多 前言 为了大家能够对 ...

  3. 【视频教程免费领取】聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎

    领取方式 关注公众号,发送Python0407获取下载链接. 扫码关注公众号,公众号回复 Python0407 获取下载地址 目录结构 目录:/读书ReadBook [57.6G] ┣━━48G全套J ...

  4. Python机器学习基础之Matplotlib库的使用

    声明:代码的运行环境为Python3.Python3与Python2在一些细节上会有所不同,希望广大读者注意.本博客以代码为主,代码中会有详细的注释.相关文章将会发布在我的个人博客专栏<Pyth ...

  5. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

  6. python爬取app播放的视频,Python爬虫工程师必学——App数据抓取实战视频教程

    爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.本课程主要为同学讲解如何用python实现App数据抓取,课程从开发环境搭建,App爬虫必备利器详解,项目实战,到最后的多App ...

  7. 赚到!4个Python初学者必学的Numpy小技巧

    2020-01-22 17:01:00 全文共3384字,预计学习时长10分钟 图源:Unsplash Python初学者除了要掌握基础知识外,了解一些小技巧.小窍门也是学习路上必不可少的一种催化剂, ...

  8. 来都来了,你确定不看看,使用python中的科学计算库Numpy操作数组,你一定能学废(图文并茂版)

    Numpy操作数组 Numpy库 Numpy库的介绍 Numpy库的安装: python中数组与列表对比 列表: 数组: 数组的创建 使用array方法创建数组 注意: ndmin,dtype参数的使 ...

  9. Python机器学习笔记:sklearn库的学习

    自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了,scikit-learn简称sklearn,支持包括分类,回归,降维和聚类四大机器学习算法.还包括了特征提取,数据 ...

最新文章

  1. oracle-Oracle试题
  2. SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍试读版
  3. Java Socket实现客户端服务端之间的通信
  4. 小红书再度出拳整治医美 首批处置违规笔记27.9万篇
  5. 复杂度分析当中的Θ、Ο、Ω
  6. 通过自动化接口调用InstallShield 报错的解决办法
  7. 梅创社c语言课本答案解析,c语言程序设计第2版) 教学课件 作者 梅创社答案 第一章答案.docx...
  8. SEO人员,不要见风是雨
  9. linux下加载so文件
  10. Google收购YouTube一周年:开挖的视频金矿
  11. webshell流量隐蔽CS和MSF联动
  12. 转 - DataGuard中如何配置LOG_ARCHIVE_DEST_n参数
  13. Sam版Matlab粒子群PSO工具已经更新
  14. java拼图_java拼图
  15. android app数据电脑,Android APP连接电脑数据库(以SQL Server为例)
  16. JavaEE进阶总结
  17. 蓝桥杯水题 单词分析【第十一届】【省赛】【C组】C/C++
  18. 使用Docker+Jenkin自动化流水线
  19. 推荐5个程序员专属的开源APP
  20. 汽车百科系列之(九): 山路驾驶技术要点

热门文章

  1. 重写JFrame的扩大 缩小 关闭按钮 以及菜单等
  2. 富文本编辑器-Ueditor
  3. 4、spring核心AOP
  4. 解决Jsp与Java后台之间url传值中文乱码问题
  5. 开发机器上利用vs2013调试远程IIS上的c#程序
  6. Erlang虚拟机的启动
  7. angular2.0学习日记1
  8. python模块之keyword
  9. 枚举类型和各种类型之间转换
  10. 使用.NET中的XML注释(一) -- XML注释标签讲解