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中的urllib2模块
Nov 13 Python
一个Python最简单的接口自动化框架
Jan 02 Python
详解python函数传参是传值还是传引用
Jan 16 Python
python快速建立超简单的web服务器的实现方法
Feb 17 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
python实现定时发送qq消息
Jan 18 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
Python浮点数四舍五入问题的分析与解决方法
Nov 19 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 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
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php常用字符函数实例小结
2016/12/29 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
一则python3的简单爬虫代码
2014/05/26 Python
浅谈Python中的数据类型
2015/05/05 Python
python实现将文本转换成语音的方法
2015/05/28 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
python制作微博图片爬取工具
2021/01/16 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
物流仓管员工作职责
2014/01/06 职场文书
《诺贝尔》教学反思
2014/02/17 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
2014年人事部工作总结
2014/12/03 职场文书
学生党员检讨书范文
2014/12/27 职场文书
教师求职简历自我评价
2015/03/10 职场文书
财务出纳岗位职责
2015/03/31 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
班主任工作总结范文
2015/08/13 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js