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使用socket远程连接错误处理方法
Apr 29 Python
python实现中文转换url编码的方法
Jun 14 Python
Python 自动化表单提交实例代码
Jun 08 Python
python+opencv轮廓检测代码解析
Jan 05 Python
Python字典及字典基本操作方法详解
Jan 30 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
tensorboard显示空白的解决
Feb 15 Python
django 扩展user用户字段inlines方式
Mar 30 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
深入浅析Django MTV模式
Sep 04 Python
Python FuzzyWuzzy实现模糊匹配
Apr 28 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
PHP读取大文件的几种方法介绍
2016/10/27 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python读写docx文件的方法
2018/05/08 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
董事长职责范文
2013/11/08 职场文书
求职信格式范本
2013/11/15 职场文书
电气工程师岗位职责
2014/01/01 职场文书
创建青年文明号材料
2014/05/09 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
django中websocket的具体使用
2022/01/22 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫