Numpy基础笔记---Array 和matrix(2)

el/2024/7/17 21:29:47

一、关于Numpy

       Numpy是Python第一个矩阵类型,提供了大量矩阵处理的函数。非正式地来说,它是一个使运算更easy,执行速度更快的库,因为它的内部运算是通过C语言实现的。

     numpy包含了两种基本的数据类型:矩阵和数组在使用标准的python时,处理这两种数据类型都需要循环,而在numpy中则可以省略这些语句。

二、简单使用数组Array

处理数组的一些例子:

>>> from numpy import array
>>> mm = array((1,1,1))
>>> nn = array((1,2,3))
>>> mm + nn
array([2, 3, 4])

如果只用Python常规处理的话,上述过程则必须使用for循环。

对每个元素乘以2:

>>> mm * 2
array([2, 2, 2])

对每个元素平方:

>>> nn ** 2
array([1, 4, 9])

可以像访问列表易于访问数组里的元素:

>>> nn[1]
2

Numpy也支持多维数组:

>>> jj = array([[1,2,3],[1,1,1]])
>>> jj
array([[1, 2, 3],[1, 1, 1]])

多维数组中的元素也可以像列表一样访问:

>>> jj[0]
array([1, 2, 3])>>> jj[0][1]
2

也可以用矩阵方式访问:

>>> jj[0,1]
2

当把两个数组乘起来的时候,两个数组的元素将对应相乘:

>>> a1 = array([1,2,3])
>>> a2 = array([3,4,5])
>>> a1 * a2
array([ 3,  8, 15])

三、简单使用矩阵matrix

导入:

>>> from numpy import mat,matrix

关键字mat是matrix的缩写。

>>> ss = mat([1,2,3])
>>> ss
matrix([[1, 2, 3]])
>>> mm = matrix([1,2,3])
>>> mm
matrix([[1, 2, 3]])

可以访问矩阵中的单个元素:

>>> mm[0,1] # 0代表第0行
2

可以把Python列表转成Numpy矩阵:

>>> pyList = [5,11,13]
>>> mat(pyList)
matrix([[ 5, 11, 13]])

试试上面两个矩阵相乘:

Traceback (most recent call last):File "<stdin>", line 1, in <module>File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py", line 343, in __mul__return N.dot(self, asmatrix(other))
ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

可以看到,矩阵数据类型的运算会强制执行数学中的矩阵运算。矩阵相乘的必要条件是左边矩阵的列数和右边矩阵的行数必须相等。这时候需要将其中的一个矩阵转置,numpy数据类型中有一个转置的方法:

>>> mm * ss.T
matrix([[14]])

这样就调用了.T完成了对ss的转置。

知道矩阵的大小有助于上述错误的调试,可以通过numpy中的shape方法来查看矩阵或者数组的维数:

>>> from numpy import shape
>>> shape(mm)
(1, 3)

如果需要把矩阵mm的每个元素和矩阵ss的每个元素对应相乘应该怎么办呢?这就是所谓的元素相乘法,可以使用Numpy的multiply方法:

>>> from numpy import multiply
>>> multiply(mm,ss)
matrix([[1, 4, 9]])

此外,矩阵和数组还有很多有用的方法,如排序:

>>> mm.sort()
>>> mm
matrix([[1, 2, 3]])

这种排序方法是原地排序(即排序后的结果占用原始的数据空间),所以如果希望保留数据的原序,则必须事先做一份拷贝。也可以用argsort()方法得到矩阵中每个元素的排序序号:

>>> dd = mat([4,5,1])
>>> dd.argsort()
matrix([[2, 0, 1]])

可以计算矩阵的均值

>>> dd.mean()
3.3333333333333335

再回顾下多维数组:

>>> jj = mat([[1,2,3],[8,8,8]])
>>> jj
matrix([[1, 2, 3],[8, 8, 8]])
>>> shape(jj)
(2, 3)

这是一个2行3列的数组,如果想取出其中一行的元素,可以使用冒号(:)操作符和行号来完成。 
例如,要取出第一行元素,应该输入:

>>> jj[1:]
matrix([[8, 8, 8]])
>>> jj[1,0:3]
matrix([[8, 8, 8]])

还可以指定要取出元素的范围。如果想要取出第一行第0列和第1列的元素,可以使用下面的语句:

>>> jj[1,0:2]
matrix([[8, 8]])

这种索引方式能够简化numpy的编程。在数组和矩阵数据类型之外,Numpy还提供了其他有用的方法。

建议浏览完整的官方文档 : http://docs.scipy.org/doc/




http://www.ngui.cc/el/5557040.html

相关文章

python之pandas的基本使用series和dataframe(1)

一、pandas概述 pandas &#xff1a;pannel data analysis&#xff08;面板数据分析&#xff09;。pandas是基于numpy构建的&#xff0c;为时间序列分析提供了很好的支持。pandas中有两个主要的数据结构&#xff0c;一个是Series&#xff0c;另一个是DataFrame。 二、数据结构 …

python之pandas的基本使用(2)

一、排序和排名 排序&#xff1a;sort_index和sort_values函数代码示例&#xff1a;print Series排序 x Series(range(4), index [b, a, c, d]) print x.sort_index() # Series按索引排序a 1 b 0 c 2 d 3print x.sort_values() # Series按值排序 b 0 a 1 c…

matplotlib基础教程(1)

前言&#xff1a;matplotlib是一个python的第三方库&#xff0c;里面的pyplot可以用来作图。下面来学习一下如何使用它的资源。 一、使用前 首先在python中使用任何第三方库时&#xff0c;都必须先将其引入。即&#xff1a; import matplotlib.pyplot as plt 或者&#xff…

深度学习中常见分布-正态分布和伽玛分布

正态分布&#xff08;Normal distribution&#xff09;又名高斯分布&#xff08;Gaussian distribution&#xff09;&#xff0c;是一个在数学、物理及工程等领域都非常重要的概率分布&#xff0c;在统计学的许多方面有着重大的影响力。 若随机变量X服从一个数学期望为μ、标准…

tensorflow:批标准化(Bacth Normalization,BN)

批标准化&#xff08;Bactch Normalization&#xff0c;BN&#xff09;是为了克服神经网络加深导致难以训练而诞生的&#xff0c;随着神经网络深度加深&#xff0c;训练起来就会越来越困难&#xff0c;收敛速度回很慢&#xff0c;常常会导致梯度弥散问题(Vanishing Gradient Pr…

池化函数(Pooling Function)

1. 池化(Pooling)概念 在神经网络中&#xff0c;池化函数(Pooling Function)一般在卷积函数的下一层。在经过卷积层提取特征之后&#xff0c;得到的特征图代表了 比 像素 更高级的特征&#xff0c;已经可以交给 分类器 进行训练分类了。但是我们 每一组卷积核 都生成 一副…

深度学习(图像处理): A neural algorithm of artistic style算法详解

Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “A neural algorithm of artistic style.” arXiv preprint arXiv:1508.06576 (2015). 下面这篇发表于CVPR16&#xff0c;内容类似&#xff0c;排版更便于阅读。 Gatys, Leon A., Alexander S. Ecker, and Matthias…

深度学习(图像处理)A Neural Algorithm of Artistic Style 图像风格转换 - keras简化版实现

前言 深度学习是最近比较热的词语。说到深度学习的应用&#xff0c;第一个想到的就是Prisma App的图像风格转换。既然感兴趣就直接开始干&#xff0c;读了论文&#xff0c;一知半解&#xff1b;看了别人的源码&#xff0c;才算大概了解的具体的实现&#xff0c;也惊叹别人的奇思…

统计学习:正则化与交叉验证

1. 正则化 模型选择的经典方法是正则化&#xff08;regularization&#xff09;。正规化是结构风险最小化策略的实现&#xff0c;是在经验风险上加一个正则化项&#xff08;regularizer&#xff09;或罚项&#xff08;penalty term&#xff09;。正则化一般是模型复杂度的单调递…

Neo4j数据库基础

1、Neo4j简介 可能很多同学之前没有接触过图数据库&#xff0c;Neo4j就是一个图数据库&#xff0c;首先对Neo4j做一个初步的介绍&#xff1a; Neo4j是一个——面向网络的数据库——基于磁盘的、具备完全的事务特性的Java持久化引擎&#xff0c;但是它将结构化数据存储在网络上…