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 相关文章推荐
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
利用python爬取软考试题之ip自动代理
Mar 28 Python
python的变量与赋值详细分析
Nov 08 Python
python使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 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
PHP利用COM对象访问SQLServer、Access
2006/10/09 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
深入理解js promise chain
2016/05/05 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
门卫岗位职责
2013/11/15 职场文书
工程造价与管理专业应届生求职信
2013/11/23 职场文书
结构工程个人自荐信范文
2013/11/30 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
党员创先争优活动总结
2014/05/04 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
就业证明函
2015/06/17 职场文书
护士旷工检讨书
2015/08/15 职场文书
Python基础之数据结构详解
2021/04/28 Python
Python基础 括号()[]{}的详解
2021/11/07 Python