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 re模块介绍
Nov 30 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
Python的装饰器使用详解
Jun 26 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
Python中fnmatch模块的使用详情
Nov 30 Python
python实现flappy bird游戏
Dec 24 Python
selenium获取当前页面的url、源码、title的方法
Jun 12 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
Python如何存储数据到json文件
Mar 09 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
Python 操作 MySQL数据库
Sep 18 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
php数组键名技巧小结
2015/02/17 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
jQuery版Tab标签切换
2011/03/16 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
js解决movebox移动问题
2016/03/29 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
浅谈python中set使用
2016/06/30 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
Python部署web开发程序的几种方法
2017/05/05 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Sanic框架Cookies操作示例
2018/07/17 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
带薪年假请假条
2014/02/04 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
纠纷协议书
2014/04/16 职场文书
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers