Python中Numpy ndarray的使用详解


Posted in Python onMay 24, 2019

本文主讲Python中Numpy数组的类型、全0全1数组的生成、随机数组、数组操作、矩阵的简单运算、矩阵的数学运算。

尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便。 

定义数组

>>> import numpy as np
>>> m = np.array([[1,2,3], [2,3,4]])    #定义矩阵,int64
>>> m
array([[1, 2, 3],
    [2, 3, 4]])
>>> m = np.array([[1,2,3], [2,3,4]], dtype=np.float)  #定义矩阵,float64
>>> m
array([[1., 2., 3.],
    [2., 3., 4.]])
>>> print(m.dtype)  #数据类型  
float64
>>> print(m.shape)  #形状2行3列
(2, 3)
>>> print(m.ndim)   #维数
2
>>> print(m.size)   #元素个数
6
>>> print(type(m))
<class 'numpy.ndarray'>

还有一些特殊的方法可以定义矩阵

>>> m = np.zeros((2,2))     #全0
>>> m
array([[0., 0.],
    [0., 0.]])
>>> print(type(m))        #也是ndarray类型
<class 'numpy.ndarray'>
>>> m = np.ones((2,2,3))    #全1
>>> m = np.full((3,4), 7)    #全为7
>>> np.eye(3)          #单位矩阵
array([[1., 0., 0.],
    [0., 1., 0.],
    [0., 0., 1.]])
>>> np.arange(20).reshape(4,5)  #生成一个4行5列的数组
>>>
>>> np.random.random((2,3))    #[0,1)随机数
array([[0.51123127, 0.40852721, 0.26159126],
    [0.42450279, 0.34763668, 0.06167501]])
>>> np.random.randint(1,10,(2,3))  #[1,10)随机整数的2行3列数组
array([[5, 4, 9],
    [2, 5, 7]])
>>> np.random.randn(2,3)       #正态随机分布
array([[-0.29538656, -0.50370707, -2.05627716],
    [-1.50126655, 0.41884067, 0.67306605]])
>>> np.random.choice([10,20,30], (2,3))   #随机选择
array([[10, 20, 10],
    [30, 10, 20]])
>>> np.random.beta(1,10,(2,3))       #贝塔分布
array([[0.01588963, 0.12635485, 0.22279098],
    [0.08950147, 0.02244569, 0.00953366]])

操作数组

>>> from numpy import *
>>> a1=array([1,1,1])  #定义一个数组
>>> a2=array([2,2,2])
>>> a1+a2        #对于元素相加
array([3, 3, 3])
>>> a1*2         #乘一个数
array([2, 2, 2])

##
>>> a1=np.array([1,2,3])
>>> a1
array([1, 2, 3])
>>> a1**3       #表示对数组中的每个数做立方
array([ 1, 8, 27])

##取值,注意的是它是以0为开始坐标,不matlab不同
>>> a1[1]
2

##定义多维数组
>>> a3=np.array([[1,2,3],[4,5,6]])
>>> a3
array([[1, 2, 3],
    [4, 5, 6]])
>>> a3[0]       #取出第一行的数据
array([1, 2, 3])
>>> a3[0,0]      #第一行第一个数据
1
>>> a3[0][0]     #也可用这种方式
1
>>> a3
array([[1, 2, 3],
    [4, 5, 6]])
>>> a3.sum(axis=0)   #按行相加,列不变
array([5, 7, 9])
>>> a3.sum(axis=1)   #按列相加,行不变
array([ 6, 15])

矩阵的数学运算

关于方阵

>>> m = np.array([[1,2,3], [2,2,3], [2,3,4]])  #定义一个方阵
>>> m
array([[1, 2, 3],
    [2, 2, 3],
    [2, 3, 4]])
>>> print(np.linalg.det(m))    #求行列式
1.0
>>> print(np.linalg.inv(m))    #求逆
[[-1. 1. 0.]
 [-2. -2. 3.]
 [ 2. 1. -2.]]
>>> print(np.linalg.eig(m))   #特征值 特征向量
(array([ 7.66898014+0.j    , -0.33449007+0.13605817j,
    -0.33449007-0.13605817j]), array([[-0.47474371+0.j    , -0.35654645+0.23768904j,
    -0.35654645-0.23768904j],
    [-0.53664812+0.j    , 0.80607696+0.j    ,
     0.80607696-0.j    ],
[-0.6975867 +0.j    , -0.38956192-0.12190158j,
    -0.38956192+0.12190158j]]))
>>> y = np.array([1,2,3])
>>> print(np.linalg.solve(m, y))  #解方程组
[ 1. 3. -2.]

矩阵乘法

矩阵乘:按照线性代数的乘法

>>> a = np.array([[1,2,3], [2,3,4]])
>>> b = np.array([[1,2], [3,4], [5,6]])
>>> a
array([[1, 2, 3],
    [2, 3, 4]])
>>> b
array([[1, 2],
    [3, 4],
    [5, 6]])
>>> np.dot(a, b)   #方法一
array([[22, 28],
    [31, 40]])
>>> np.matmul(a,b)  #方法二
array([[22, 28],

注:一维数组之间运算时,dot()表示的是内积。

点乘:对应位置相乘

>>> a = np.array([[1,2],[3,4]])
>>> b = np.array([[1,1],[2,2]])
>>> a
array([[1, 2],
    [3, 4]])
>>> b
array([[1, 1],
    [2, 2]])
>>> a * b          #方法一
array([[1, 2],
    [6, 8]])
>>> np.multiply(a, b)  #方法二
array([[1, 2],
    [6, 8]])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中用于计算指数的exp()方法
May 14 Python
Python中subprocess模块用法实例详解
May 20 Python
Python实现的径向基(RBF)神经网络示例
Feb 06 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
解决Python一行输出不显示的问题
Dec 03 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
Opencv 图片的OCR识别的实战示例
Mar 02 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 Python
numpy数组之存取文件的实现示例
May 24 #Python
Python实现使用request模块下载图片demo示例
May 24 #Python
Python实现操纵控制windows注册表的方法分析
May 24 #Python
Django框架会话技术实例分析【Cookie与Session】
May 24 #Python
Django框架中间件(Middleware)用法实例分析
May 24 #Python
python与字符编码问题
May 24 #Python
Python读取stdin方法实例
May 24 #Python
You might like
织梦模板标记简介
2007/03/11 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
vue 页面跳转的实现方式
2021/01/12 Vue.js
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python实现百度语音识别api
2018/04/10 Python
对python:print打印时加u的含义详解
2018/12/15 Python
python3 pygame实现接小球游戏
2019/05/14 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
python之yield和Generator深入解析
2019/09/18 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
python语言是免费还是收费的?
2020/06/15 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
大学生创业计划书的范文
2014/01/07 职场文书
个人简历中自我评价
2014/02/11 职场文书
出生证明公证书
2014/04/09 职场文书
学校安全责任书范本
2014/07/23 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
2019公司管理制度
2019/04/19 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
JS实现简单的九宫格抽奖
2022/06/28 Javascript