导航:首页 > 编程语言 > pythonnumpy矩阵操作

pythonnumpy矩阵操作

发布时间:2022-12-07 08:32:51

python如何输入矩阵

使用numpy创建矩阵有2种方法,一种是使用numpy库的matrix直接创建,另一种则是使用array来创建。
首先导入numpy:
(1)import numpy
(2)from numpy import *
(3)import numpy as np
相关推荐:《Python基础教程》
然后分别用上面说的2种方法来分别构建一个4×3的矩阵,如图:

⑵ Numpy的各种下标操作

目录

本文所使用的Numpy版本为: Version: 1.20.3 。基于Python和C++开发的Numpy一般被认为是Python中最好的Matlab替代品,其中最常见的就是各种Numpy矩阵类型的运算。对于矩阵的运算而言,取对轴和元素是至关重要的,这里我们来看看一些常见的Numpy下标取法和标记。

这里我们定义一个4*4的矩阵用于取下标,为了方便理解,这个矩阵中所有的元素都是不一样的:

比如我们想取第一行的所有元素,那么就是x[0],如果想取第一行的第一列的元素,那么就是x[0][0],而在numpy中为了简化,可以讲x[0][0]写成x[0,0]的形式:

在上一个章节中我们提到的取单个元素x[0,0]的方法,其实本质上等同于x[(0,0)],也就是一个tuple的格式,但是如果把这里的tuple格式换成list,所表示的含义和得到的结果是完全不一样的:

这里list格式的id,代表的意思是分别取第二行和第二行的内容,再放到一个完整的矩阵中。如果id设置为[1,2]的话,就是分别取第二行和第三行,而不是取第二行的第二个元素。如果需要取第二行的第二列的元素,那么还是需要用tuple的格式来取下标。有一个比较有意思的点是,如果把刚才的下标重复输入两次,也就是x[[1,2],[1,2]]的话,所表示的含义是分别取x[1][1]和x[2][2],再放到同一个矩阵中,也是一种比较常用的分离式取下标的方法。

在Numpy的下标中,冒号和后置逗号同时出现,表示轴向全取,比如x[0,:]表示取x的第一行的所有数据,x[:,0]表示取第一列的所有数据:

虽然上文我们提到,如果下标被定义成一个list格式的话,就表示分别取。但是目前Numpy的实现中还有这样的一个遗留问题,就是使用多维的list格式取下标,会自动将最外层转化成tuple的格式,采用tuple的取法。虽然计算时会给出告警,但是目前来说也需要引起一定的注意。

在Numpy中冒号不与后置逗号同时出现时,表示的含义是从冒号前的元素取值到冒号后的元素,比如x[0:3]所表示的元素是[x[0],x[1],x[2]]。如果是两个冒号连用中间没有逗号的话,比如x[0:3:2],表示的是每隔2个元素取一个,最后得到的应该是[x[0],x[2]]。还有一种非常常见的操作是取[::-1]这样的下标,所表示的含义就是对当前轴进行倒序。

虽然在Numpy中有broadcast和expand_dim之类的函数可以对矩阵进行扩维或者是广播,但是更方便的操作是对需要扩展的维度取一个None的下标,比如要把一个(4,4)大小的矩阵扩展成(1,4,4),那么就对下标取[None,:]或者[None,:,:]即可。而如果需要把(4,4)变成(4,1,4),那就需要把None换个位置为[:,None,:]就可以实现:

在高维矩阵中,因为没有了行和列这样的概念,因此需要从轴上去理解相关操作,我们先定义一个简单的三维张量:

常规的操作其实都跟前面章节中介绍二维张量一致,这里我们考虑一种比较特殊的场景。就是如果同样用二维矩阵的取法去取,只是第一条轴每个元素取一个id,比如取第0条轴的[0,1]元素和第1条轴的[2,3]元素,那么其实最简单的方案就是在第一个下标的位置加上一个位置元素,这个位置元素用下标id的第一个轴的长度去定义即可:

这篇文章的主要内容是梳理在Numpy中经常用到的各种取下标的操作,包括但不限于取指定轴的所有元素、取指定位置的单个元素、取指定位置的多个元素、扩维以及取未显式给定位置的多个元素等等。比较重要的是在Numpy中tuple的取法和list的取法是代表不一样的含义,并且由于 历史 原因,Numpy中存在一些list取法和numpy.array的取法表示不一致的地方,在本文中进行了总结。

本文首发链接为:https://www.cnblogs.com/dechinphy/p/numpy-id.html

作者ID:DechinPhy

更多原着文章请参考:https://www.cnblogs.com/dechinphy/

打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958

⑶ python的矩阵可以做什么

python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入numpy的包。
计算矩阵对应行列的最大、最小值、和。
3>>>a1=mat([[1,1],[2,3],[4,2]])
>>> a1
matrix([[1, 1],
[2, 3],
[4, 2]])
计算每一列、行的和
>>>a2=a1.sum(axis=0) #列和,这里得到的是1*2的矩阵
>>> a2
matrix([[7, 6]])
>>>a3=a1.sum(axis=1) #行和,这里得到的是3*1的矩阵
>>> a3
matrix([[2],
[5],
[6]])
>>>a4=sum(a1[1,:]) #计算第一行所有列的和,这里得到的是一个数值
>>> a4
5 #第0行:1+1;第2行:2+3;第3行:4+2
计算最大、最小值和索引
>>>a1.max() #计算a1矩阵中所有元素的最大值,这里得到的结果是一个数值
4
>>>a2=max(a1[:,1]) #计算第二列的最大值,这里得到的是一个1*1的矩阵
>>> a2
matrix([[3]])
>>>a1[1,:].max() #计算第二行的最大值,这里得到的是一个一个数值
3
>>>np.max(a1,0) #计算所有列的最大值,这里使用的是numpy中的max函数
matrix([[4, 3]])
>>>np.max(a1,1) #计算所有行的最大值,这里得到是一个矩阵
matrix([[1],
[3],
[4]])
>>>np.argmax(a1,0) #计算所有列的最大值对应在该列中的索引
matrix([[2, 1]])
>>>np.argmax(a1[1,:]) #计算第二行中最大值对应在该行的索引
1

⑷ Python numpy矩阵值之间进行快速映射

numpy.vectorize(),详情见 文档

实现:

这里我是把矩阵的值进行一对一映射,其中lab.id2trainId是一个字典,dictionary的get方法可以返回指定键的值,这样就构成了映射关系,处理速度很快。

除了一对一单值映射之外,比如把一个值映射为一个tuple也是可以的,这个tuple可以是RGB值,这样就可以把原本一个矩阵以带颜色的图片形式显示了。

⑸ python 矩阵操作, 筛选符合条件的行

我举个简单的例子:


取出含有元素0的所有行

importnumpyasnp
x=np.array([[1,2,3,4,0],[2,3,4,5,6],[0,1,2,3,4]])
b=[]
forrowinx:
foriinrow:
ifi==0:
b.append(row)
printb

PS G:Python learning-Q> python ex.py

[array([1, 2, 3, 4, 0]), array([0, 1, 2, 3, 4])]

⑹ python numpy 两个矩阵每个元素求并集,并返回一个与这两个矩阵大小相同的矩阵

直接两个矩阵相加就可以了

两个矩阵相加即是对应位置的相加,而Python中的True、False值相加时是相当于1和0的,np中加之后又要保持原来的数据类型,所以1+1=2也会变成True

>>>importnumpyasnp
>>>a=np.array([[True,True],[False,False]])
>>>b=np.array([[True,False],[True,False]])
>>>a
array([[True,True],
[False,False]],dtype=bool)
>>>b
array([[True,False],
[True,False]],dtype=bool)
>>>a+b
array([[True,True],
[True,False]],dtype=bool)
>>>True+False
1
>>>True+True
2
>>>False+False
0
>>>bool(1)
True
>>>bool(2)
True
>>>bool(0)
False

⑺ python中稀疏矩阵的怎么用numpy处理

NumPy是一个关于矩阵运算的库,熟悉Matlab的都应该清楚,这个库就是让python能够进行矩阵话的操作,而不用去写循环操作。
下面对numpy中的操作进行总结。
numpy包含两种基本的数据类型:数组和矩阵。
数组(Arrays)
>>> 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=array([1,2,3])>>> a1
array([1, 2, 3])>>> a1**3 #表示对数组中的每个数做平方array([ 1, 8, 27])##取值,注意的是它是以0为开始坐标,不matlab不同>>> a1[1]2##定义多维数组>>> a3=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##数组点乘,相当于matlab点乘操作>>> a1=array([1,2,3])>>> a2=array([4,5,6])>>> a1*a2
array([ 4, 10, 18])

Numpy有许多的创建数组的函数:
import numpy as np

a = np.zeros((2,2)) # Create an array of all zerosprint a # Prints "[[ 0. 0.]
# [ 0. 0.]]"b = np.ones((1,2)) # Create an array of all onesprint b # Prints "[[ 1. 1.]]"c = np.full((2,2), 7) # Create a constant arrayprint c # Prints "[[ 7. 7.]
# [ 7. 7.]]"d = np.eye(2) # Create a 2x2 identity matrixprint d # Prints "[[ 1. 0.]
# [ 0. 1.]]"e = np.random.random((2,2)) # Create an array filled with random valuesprint e # Might print "[[ 0.91940167 0.08143941]
# [ 0.68744134 0.87236687]]"

数组索引(Array indexing)
矩阵
矩阵的操作与Matlab语言有很多的相关性。
#创建矩阵
>>> m=mat([1,2,3])
>>> m
matrix([[1, 2, 3]])

#取值
>>> m[0] #取一行
matrix([[1, 2, 3]])
>>> m[0,1] #第一行,第2个数据2>>> m[0][1] #注意不能像数组那样取值了
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 305, in __getitem__
out = N.ndarray.__getitem__(self, index)
IndexError: index 1 is out of bounds for axis 0 with size 1#将Python的列表转换成NumPy的矩阵
>>> list=[1,2,3]
>>> mat(list)
matrix([[1, 2, 3]])

#矩阵相乘
>>> m1=mat([1,2,3]) #1行3列
>>> m2=mat([4,5,6])
>>> m1*m2.T #注意左列与右行相等 m2.T为转置操作
matrix([[32]])
>>> multiply(m1,m2) #执行点乘操作,要使用函数,特别注意
matrix([[ 4, 10, 18]])

#排序
>>> m=mat([[2,5,1],[4,6,2]]) #创建2行3列矩阵
>>> m
matrix([[2, 5, 1],
[4, 6, 2]])
>>> m.sort() #对每一行进行排序
>>> m
matrix([[1, 2, 5],
[2, 4, 6]])

>>> m.shape #获得矩阵的行列数
(2, 3)
>>> m.shape[0] #获得矩阵的行数2>>> m.shape[1] #获得矩阵的列数3#索引取值
>>> m[1,:] #取得第一行的所有元素
matrix([[2, 4, 6]])
>>> m[1,0:1] #第一行第0个元素,注意左闭右开
matrix([[2]])
>>> m[1,0:3]
matrix([[2, 4, 6]])
>>> m[1,0:2]
matrix([[2, 4]])35363738394

扩展矩阵函数tile()
例如,要计算[0,0,0]到一个多维矩阵中每个点的距离,则要将[0,0,0]进行扩展。
tile(inX, (i,j)) ;i是扩展个数,j是扩展长度
实例如下:
>>>x=mat([0,0,0])
>>> x
matrix([[0, 0, 0]])
>>> tile(x,(3,1)) #即将x扩展3个,j=1,表示其列数不变
matrix([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
>>> tile(x,(2,2)) #x扩展2次,j=2,横向扩展
matrix([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])1234567891011121314

⑻ python库numpy使用技巧(二)——随机抽取二维矩阵中多行或多列

使用库numpy

创建一个二维数组

行与列随机抽取类似

行随机抽取

列随机抽取

阅读全文

与pythonnumpy矩阵操作相关的资料

热点内容
python30特效程序编码 浏览:391
安卓跟苹果互传照片用什么 浏览:848
原创小说app哪个好看 浏览:97
首台湖南造鲲鹏服务器云服务器 浏览:268
redhatphp 浏览:456
android智能家居蓝牙 浏览:646
pt螺纹编程 浏览:451
手机电音app哪个好 浏览:749
checksum命令 浏览:637
java创建xml文件 浏览:170
算命源码国际版 浏览:283
三菱模块化编程 浏览:718
控件读取文件源码 浏览:445
文件夹侧面目录标签怎么制作 浏览:232
做程序员学什么 浏览:320
pdfeditor教程 浏览:880
fortran把文件放入文件夹 浏览:709
程序员1年经验不敢投简历 浏览:481
如何看电脑的源码 浏览:897
找工作app软件哪个好 浏览:96