Numpy

用于科学计算的python模块,提供了Python中没有的数组对象,支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换以及随机数生成等功能,并可与C++、FORTRAN等语言无缝结合。

菜鸟教程:https://www.runoob.com/numpy/numpy-dtype.html

·导入numpy模块(打开cmd窗口)

pip install numpy

·简单应用

import numpy as np

1.生成数组

 >>> np.array([1, 2, 3, 4, 5])        # 把列表转换为数组
array([1, 2, 3, 4, 5])
>>> np.array((1, 2, 3, 4, 5)) # 把元组转换成数组
array([1, 2, 3, 4, 5])
>>> np.array(range(5)) # 把range对象转换成数组
array([0, 1, 2, 3, 4])
>>> np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
array([[1, 2, 3],
[4, 5, 6]])
>>> np.arange(8) # 类似于内置函数range()
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> np.arange(1, 10, 2) #从1到10(包括1,不包括10),步长为2
array([1, 3, 5, 7, 9])
>>> np.linspace(0, 10, 11)
# 等差数组,包含11个数,从0到10(包括0,也包括10,闭区间),平均分为11个数字array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
>>> np.linspace(0, 10, 11, endpoint=False) # 不包含终点
array([ 0. , 0.90909091, 1.81818182, 2.72727273, 3.63636364,
4.54545455, 5.45454545, 6.36363636, 7.27272727, 8.18181818,
9.09090909])
>>> np.logspace(0, 100, 10) # 对数数组,从0到100,取10个数,返回10个数分别作为幂,计算基为10的结果数组
array([ 1.00000000e+000, 1.29154967e+011, 1.66810054e+022,
2.15443469e+033, 2.78255940e+044, 3.59381366e+055,
4.64158883e+066, 5.99484250e+077, 7.74263683e+088,
1.00000000e+100])
>>>np.logspace(0, 10, 5)
array([1.00000000e+00, 3.16227766e+02, 1.00000000e+05, 3.16227766e+07,
1.00000000e+10])
>>> np.logspace(1,6,5, base=2) # 对数数组,相当于2 ** np.linspace(1,6,5)
array([ 2. , 4.75682846, 11.3137085 , 26.90868529, 64. ])
>>>np.logspace(1,5,5,base=2)
array([ 2., 4., 8., 16., 32.])
>>>np.logspace(1,6,3,base=2)
array([ 2. , 11.3137085, 64. ])
>>> np.zeros(3) # 全0一维数组
array([ 0., 0., 0.])
>>> np.ones(3) # 全1一维数组
array([ 1., 1., 1.])
>>> np.zeros((3,3)) # 全0二维数组,3行3列
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> np.zeros((3,1)) # 全0二维数组,3行1列
array([[ 0.],
[ 0.],
[ 0.]])
>>> np.zeros((1,3)) # 全0二维数组,1行3列
array([[ 0., 0., 0.]])
>>> np.ones((3,3)) # 全1二维数组
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> np.ones((1,3)) # 全1二维数组
array([[ 1., 1., 1.]])
>>> np.identity(3) # 单位矩阵
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
>>> np.identity(2)
array([[ 1., 0.],
[ 0., 1.]])
>>> np.empty((3,3)) # 空数组,只申请空间而不初始化,元素值是不确定的
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> np.random.randint(0, 50, 5) # 随机数组,5个0到50之间的数字
array([13, 47, 31, 26, 9])
>>> np.random.randint(0, 50, (3,5)) # 3行5列
array([[34, 2, 33, 14, 40],
[ 9, 5, 10, 27, 11],
[26, 17, 10, 46, 30]])
>>> np.random.rand(10)
array([ 0.98139326, 0.35675498, 0.30580776, 0.30379627, 0.19527425,
0.59159936, 0.31132305, 0.20219211, 0.20073821, 0.02435331])
>>> np.random.standard_normal(5) # 从标准正态分布中随机采样
array([ 2.82669067, 0.9773194 , -0.72595951, -0.11343254, 0.74813065])

 

2.数组与数值的算术运算

>>> a=np.array((1,2,3,4,5))
>>> a+2
array([3, 4, 5, 6, 7])
>>> a-2
array([-1, 0, 1, 2, 3])
>>> a*2
array([ 2, 4, 6, 8, 10])
>>> a/2
array([0.5, 1. , 1.5, 2. , 2.5])
>>> a//2
array([0, 1, 1, 2, 2], dtype=int32)
>>> a**2
array([ 1, 4, 9, 16, 25], dtype=int32)

  

3.数组与数组的算术运算

>>> a=np.array((1,2,3))
>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> a+b
array([[ 2, 4, 6],
[ 5, 7, 9],
[ 8, 10, 12]])
>>> a-b
array([[ 0, 0, 0],
[-3, -3, -3],
[-6, -6, -6]])
>>> a*b
array([[ 1, 4, 9],
[ 4, 10, 18],
[ 7, 16, 27]])
>>> a//b
array([[1, 1, 1],
[0, 0, 0],
[0, 0, 0]], dtype=int32)

  

4.二维数组转置

>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> b
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> print(b.T)
[[1 4 7]
[2 5 8]
[3 6 9]]

  

5.向量点积

>>> a=np.array((5,6,7))
>>> b=np.array((6,6,6))
>>> np.dot(a,b)
108

  

6.数组元素访问

>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> b[0,0]
1
>>> b[0][2]
3

  

多元素同时访问

>>> x = np.arange(0,100,10,dtype=np.floating)
>>> x
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.])
>>> x[[1, 3, 5]] # 同时访问多个位置上的元素
array([ 10., 30., 50.])

  

7.三角函数运算

>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> np.sin(b)
array([[ 0.84147098, 0.90929743, 0.14112001],
[-0.7568025 , -0.95892427, -0.2794155 ],
[ 0.6569866 , 0.98935825, 0.41211849]])

  

8.四舍五入

>>> np.round(np.sin(b))
array([[ 1., 1., 0.],
[-1., -1., -0.],
[ 1., 1., 0.]])

  

9.对矩阵不同维度上的元素进行求和

>>> x=np.arange(0,10).reshape(2,5)
>>> x
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> np.sum(x)
45
>>> np.sum(x,axis=0) #每列求和
array([ 5, 7, 9, 11, 13])
>>> np.sum(x,axis=1) #每行求和
array([10, 35])

  

10.计算矩阵不同维度上元素的均值

>>> np.average(x,axis=0)
array([2.5, 3.5, 4.5, 5.5, 6.5])
>>> np.average(x,axis=1)
array([2., 7.])

  

11.计算数据的标准差与方差

>>> x=np.random.randint(0,10,size=(3,3))
>>> x
array([[5, 3, 5],
[3, 6, 2],
[6, 0, 9]])
>>> np.std(x) #标准差
2.494438257849294
>>> np.std(x,axis=1) #列行标准差
array([0.94280904, 1.69967317, 3.74165739])
>>> np.var(x) #方差
6.222222222222222

  

12.对矩阵不同维度上的元素求最大值

>>> x=np.random.randint(0,10,size=(3,3))
>>> x
array([[2, 6, 9],
[1, 8, 3],
[0, 9, 8]])
>>> np.max(x)
9
>>> np.max(x,axis=1) #每列最大值
array([9, 8, 9])

13.对矩阵不同维度上的元素进行排序

>>> np.sort(x)
array([[2, 6, 9],
[1, 3, 8],
[0, 8, 9]])
>>> np.sort(x,axis=0)
array([[0, 6, 3],
[1, 8, 8],
[2, 9, 9]])

14.生成特殊数组

>>> np.empty((3,3)) #只申请空间,不初始化,速度很快
array([[0.00000000e+000, 0.00000000e+000, 0.00000000e+000],
[0.00000000e+000, 0.00000000e+000, 4.82208070e-321],
[1.86918698e-306, 1.78021662e-306, 2.46155235e-312]])

15.改变数组大小

>>> a=np.arange(1,11,1)
>>> a
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> a.shape=2,5
>>> a
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
>>> a.shape=5,-1 #-1表示自动计算
>>> a
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])
>>> a.reshape(2,5)
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])

16.切片操作

>>> a=np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>> a[::2]
array([0, 2, 4, 6, 8]) >>> c=np.array([[j*10+ i for i in range(6)] for j in range (6)])
>>> c
array([[ 0, 1, 2, 3, 4, 5],
[10, 11, 12, 13, 14, 15],
[20, 21, 22, 23, 24, 25],
[30, 31, 32, 33, 34, 35],
[40, 41, 42, 43, 44, 45],
[50, 51, 52, 53, 54, 55]])
>>> c[0,3:5] #取第0行第三个和第四个元素
array([3, 4])

17.布尔运算

>>> x=np.random.rand(10)
>>> x
array([0.10905435, 0.57768227, 0.18788365, 0.23399672, 0.93576621,
0.62251011, 0.54649539, 0.37180411, 0.72779445, 0.05535632])
>>> x>0.5
array([False, True, False, False, True, True, True, False, True,
False])
>>> x[x>0.5] #取出所有大于0.5的元素
array([0.57768227, 0.93576621, 0.62251011, 0.54649539, 0.72779445])
>>> np.array([1,2,3]) < np.array([3,2,1])
array([ True, False, False])
>>> np.array([1,2,3]) == np.array([3,2,1])
array([False, True, False])

18.取整运算

>>> x=np.random.rand(10)*50
>>> x
array([19.13213223, 38.14702133, 41.30754565, 19.51765474, 19.73843457,
25.66530995, 34.74361578, 12.44682723, 6.03817843, 34.18593124])
>>> np.array([t-int(t) for t in x]) #获取小数部分
array([0.13213223, 0.14702133, 0.30754565, 0.51765474, 0.73843457,
0.66530995, 0.74361578, 0.44682723, 0.03817843, 0.18593124])

19.广播

>>> a=np.arange(0,60,10).reshape(-1,1)
>>> b=np.arange(0,6)
>>> a
array([[ 0],
[10],
[20],
[30],
[40],
[50]])
>>> b
array([0, 1, 2, 3, 4, 5])
>>> a+b
array([[ 0, 1, 2, 3, 4, 5],
[10, 11, 12, 13, 14, 15],
[20, 21, 22, 23, 24, 25],
[30, 31, 32, 33, 34, 35],
[40, 41, 42, 43, 44, 45],
[50, 51, 52, 53, 54, 55]])

20.分段函数

>>> x=np.random.randint(0,10,size=(1,10))
>>> x
array([[4, 4, 8, 9, 0, 0, 4, 0, 3, 5]])
>>> np.where(x<5,0,1) #选出小于5,0,1的数
array([[0, 0, 1, 1, 0, 0, 0, 0, 0, 1]])
>>>np.piecewise(x,[x<7,x>4],[lambda x:x*2,lambda x:x*3]) #小于7的数乘2,大于4的数乘3
array([[ 8, 8, 24, 27, 0, 0, 8, 0, 6, 15]])

21.计算唯一值以及出现次数

>>> x=np.random.randint(0,10,10)
>>> x
array([1, 1, 0, 2, 7, 1, 6, 6, 9, 7])
>>> np.unique(x) #计算唯一值
array([0, 1, 2, 6, 7, 9])
>>> np.bincount(x) #计算出现的次数,但是因为访问是无序的,所以最后并不是顺序计数
array([1, 3, 1, 0, 0, 0, 2, 2, 0, 1], dtype=int64)

22.计算加权平均值

>>> y=np.array([round(i,1) for i in list (np.random.random(10))])
>>> y
array([0.2, 0. , 0.6, 0.3, 0.7, 0. , 0.7, 0.4, 0.8, 0.7]) #随机生成10个0-1之间的带一位小数的数
>>> np.sum(x*y)/np.sum(np.bincount(x)) #平均值
2.44

23.矩阵运算

  

>>> a_list=[3,5,7]
>>> a_mat=np.matrix(a_list) #设置为矩阵库
>>> a_mat
matrix([[3, 5, 7]])
>>> np.shape(a_mat) #矩阵为一行三列
(1, 3)
>>> b_mat=np.matrix((1,2,3))
>>> b_mat
matrix([[1, 2, 3]])
>>> a_mat * b_mat.T #矩阵乘法
matrix([[34]])
>>> a_mat.argsort() #返回的是数组值从小到大的索引值
matrix([[0, 1, 2]], dtype=int64)
>>> a_mat.sum()
15
>>> a_mat
matrix([[3, 5, 7]])
>>> a_mat.mean()
5.0
>>> a_mat.max()
7

科学计算包Numpy的更多相关文章

  1. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题

    动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...

  2. Python下科学计算包numpy和SciPy的安装

    转载自:http://blog.sina.com.cn/s/blog_62dfdc740101aoo6.html Python下大多数工具包的安装都很简单,只需要执行 “python setup.py ...

  3. Python下科学计算包numpy和SciPy的安装【原创】

    Python下大多数工具包的安装都很简单,只需要执行 "python setup.py install"命令即可.然而,由于SciPy和numpy这两个科学计算包的依赖关系较多,安 ...

  4. python科学计算包numpy用法(一)

    numpy是python中一个用来做科学计算的包,用起来十分方便,下面是我总结的numpy的用法: 1.如何创建矩阵 创建矩阵有很多种方法,主要包括以下几种: 通过array函数创建 >> ...

  5. 第六节,Python的科学计算包——Numpy

    1.基本类型(array) import numpy as np a=[1,2,3,4] b=np.array(a) #array([1,2,3.4]) type(b) #<type 'nump ...

  6. Linux下Python科学计算包numpy和SciPy的安装

      系统环境: OS:RedHat5 Python版本:Python2.7.3 gcc版本:4.1.2 各个安装包版本: scipy-0.11.0 numpy-1.6.2 nose-1.2.1 lap ...

  7. Python科学计算包模块的安装(ubuntu)

    Python的科学计算包设计到C语言代码的编译,采用pip的方式安装会出现错误. 一种简单的方式是采用的集成包,具体的步骤参考:https://www.continuum.io/downloads#_ ...

  8. 数据分析与科学计算可视化-----用于科学计算的numpy库与可视化工具matplotlib

    一.numpy库与matplotlib库的基本介绍 1.安装 (1)通过pip安装: >> pip install matplotlib 安装完成 安装matplotlib的方式和nump ...

  9. Windows下安装python的scipy等科学计算包(转)

    如果要使用python进行科学计算.数据分析等,一定要安装scipy.seaborn.numpy等等包. 但Windows下安装python的第三方库经常会出现问题.此前,已介绍过Windows下如何 ...

随机推荐

  1. Python第十章-模块和包

    模块和包 我们以前的代码都是写在一个文件中, 而且代码也比较短. 假设我们现在要写一个大的系统, 不可能把代码只写到一个文件中, 迫切想把代码写到不同的文件中, 并且能够在一个文件使用另一个文件中代码 ...

  2. ElasticSearch 倒排索引

    倒排索引 倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况. 由于每个字或词对应的文档 ...

  3. 【WPF学习】第六十二章 构建更复杂的模板

    在控件模板和为其提供支持的代码之间又一个隐含约定.如果使用自定义控件模板替代控件的标准模板,就需要确保新模板能够满足控件的实现代码的所有需要. 在简单控件中,这个过程比较容易,因为对模板几乎没有(或完 ...

  4. 玩转redis-简单消息队列

    使用go语言基于redis写了一个简单的消息队列 源码地址 使用demo redis的 list 非常的灵活,可以从左边或者右边添加元素,当然也以从任意一头读取数据 添加数据和获取数据的操作也是非常简 ...

  5. NKOJ3751 扫雷游戏

    问题描述 有一款有趣的手机游戏.棋盘上有n颗地雷,玩家需要至少扫掉其中的k颗雷.每一步,玩家可以用手指在手机屏幕上划一条直线,该直线经过的地雷都会被扫除掉.问,最少需要划几次就能扫除k颗以上的地雷? ...

  6. 1+X Web前端开发(中级)理论考试样题(附答案)

    传送门 教育部:职业教育将启动"1+X"证书制度改革 职业教育改革1+X证书制度试点启动 1+X成绩/证书查询入口 一.单选题(每小题2分,共30小题,共 60 分) 1.在Boo ...

  7. 微信小程序wx:for隐藏遍历的最后一个元素

    微信小程序开发时有时会需要从wx:for遍历的元素中选取最后一个来进行相关操作,以下方法以隐藏最后一个元素为例 index==list.length-1 通过获取列表的总长度减一来得到最后一个元素是最 ...

  8. django-filter的基本使用

    django-filter 查询 创建model和视图 from django.db import models # Create your models here. class Student(mo ...

  9. Linux如何配制Tcl编程环境

    首先,打开终端. 接着在终端输入以下命令: sudo apt-get install tcl

  10. 《闲扯Redis四》List数据类型底层编码转换

    一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...