Python中的Numpy矩阵操作
作者:峻之岭峰 发布时间:2021-10-06 07:19:23
标签:Python,Numpy,矩阵
Numpy
通过观察Python的自有数据类型,我们可以发现Python原生并不提供多维数组的操作,那么为了处理矩阵,就需要使用第三方提供的相关的包。
NumPy 是一个非常优秀的提供矩阵操作的包。NumPy的主要目标,就是提供多维数组,从而实现矩阵操作。
NumPy's main object is the homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type, indexed by a tuple of positive integers. In NumPy dimensions are called axes.
基本操作
#######################################
# 创建矩阵
#######################################
from numpy import array as matrix, arange
# 创建矩阵
a = arange(15).reshape(3,5)
a
# Out[10]:
# array([[0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.]])
b = matrix([2,2])
b
# Out[33]: array([2, 2])
c = matrix([[1,2,3,4,5,6],[7,8,9,10,11,12]], dtype=int)
c
# Out[40]:
# array([[ 1, 2, 3, 4, 5, 6],
# [ 7, 8, 9, 10, 11, 12]])
#######################################
# 创建特殊矩阵
#######################################
from numpy import zeros, ones,empty
z = zeros((3,4))
z
# Out[43]:
# array([[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]])
o = ones((3,4))
o
# Out[46]:
# array([[1., 1., 1., 1.],
# [1., 1., 1., 1.],
# [1., 1., 1., 1.]])
e = empty((3,4))
e
# Out[47]:
# array([[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]])
#######################################
# 矩阵数学运算
#######################################
from numpy import array as matrix, arange
a = arange(9).reshape(3,3)
a
# Out[10]:
# array([[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]])
b = arange(3)
b
# Out[14]: array([0, 1, 2])
a + b
# Out[12]:
# array([[ 0, 2, 4],
# [ 3, 5, 7],
# [ 6, 8, 10]])
a - b
# array([[0, 0, 0],
# [3, 3, 3],
# [6, 6, 6]])
a * b
# Out[11]:
# array([[ 0, 1, 4],
# [ 0, 4, 10],
# [ 0, 7, 16]])
a < 5
# Out[12]:
# array([[ True, True, True],
# [ True, True, False],
# [False, False, False]])
a ** 2
# Out[13]:
# array([[ 0, 1, 4],
# [ 9, 16, 25],
# [36, 49, 64]], dtype=int32)
a += 3
a
# Out[17]:
# array([[ 3, 4, 5],
# [ 6, 7, 8],
# [ 9, 10, 11]])
#######################################
# 矩阵内置操作
#######################################
from numpy import array as matrix, arange
a = arange(9).reshape(3,3)
a
# Out[10]:
# array([[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]])
a.max()
# Out[23]: 8
a.min()
# Out[24]: 0
a.sum()
# Out[25]: 36
#######################################
# 矩阵索引、拆分、遍历
#######################################
from numpy import array as matrix, arange
a = arange(25).reshape(5,5)
a
# Out[9]:
# array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14],
# [15, 16, 17, 18, 19],
# [20, 21, 22, 23, 24]])
a[2,3] # 取第3行第4列的元素
# Out[3]: 13
a[0:3,3] # 取第1到3行第4列的元素
# Out[4]: array([ 3, 8, 13])
a[:,2] # 取所有第二列元素
# Out[7]: array([ 2, 7, 12, 17, 22])
a[0:3,:] # 取第1到3行的所有列
# Out[8]:
# array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
a[-1] # 取最后一行
# Out[10]: array([20, 21, 22, 23, 24])
for row in a: # 逐行迭代
print(row)
# [0 1 2 3 4]
# [5 6 7 8 9]
# [10 11 12 13 14]
# [15 16 17 18 19]
# [20 21 22 23 24]
for element in a.flat: # 逐元素迭代,从左到右,从上到下
print(element)
# 0
# 1
# 2
# 3
# ... #######################################
# 改变矩阵
#######################################
from numpy import array as matrix, arange
b = arange(20).reshape(5,4)
b
# Out[18]:
# array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [12, 13, 14, 15],
# [16, 17, 18, 19]])
b.ravel()
# Out[16]:
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
# 17, 18, 19])
b.reshape(4,5)
# Out[17]:
# array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14],
# [15, 16, 17, 18, 19]])
b.T # reshape 方法不改变原矩阵的值,所以需要使用 .T 来获取改变后的值
# Out[19]:
# array([[ 0, 4, 8, 12, 16],
# [ 1, 5, 9, 13, 17],
# [ 2, 6, 10, 14, 18],
# [ 3, 7, 11, 15, 19]])
#######################################
# 合并矩阵
#######################################
from numpy import array as matrix,newaxis
import numpy as np
d1 = np.floor(10*np.random.random((2,2)))
d2 = np.floor(10*np.random.random((2,2)))
d1
# Out[7]:
# array([[1., 0.],
# [9., 7.]])
d2
# Out[9]:
# array([[0., 0.],
# [8., 9.]])
np.vstack((d1,d2)) # 按列合并
# Out[10]:
# array([[1., 0.],
# [9., 7.],
# [0., 0.],
# [8., 9.]])
np.hstack((d1,d2)) # 按行合并
# Out[11]:
# array([[1., 0., 0., 0.],
# [9., 7., 8., 9.]])
np.column_stack((d1,d2)) # 按列合并
# Out[13]:
# array([[1., 0., 0., 0.],
# [9., 7., 8., 9.]])
c1 = np.array([11,12])
c2 = np.array([21,22])
np.column_stack((c1,c2))
# Out[14]:
# array([[11, 21],
# [12, 22]])
c1[:,newaxis] # 添加一个“空”列
# Out[18]:
# array([[11],
# [12]])
np.hstack((c1,c2))
# Out[27]: array([11, 12, 21, 22])
np.hstack((c1[:,newaxis],c2[:,newaxis]))
# Out[28]:
# array([[11, 21],
# [12, 22]])
参考
1.NumPy官方文档
来源:https://www.cnblogs.com/sitemanager/p/9057195.html


猜你喜欢
- 1 conda介绍conda是一个python的包管理器,用来管理、安装、更新python的包和相关的依赖。另外,conda可以为特定任务创
- power(x, y) 函数,计算 x 的 y 次方。示例:x 和 y 为单个数字:import numpy as npprint(np.p
- 所以就怀疑是否编码问题,或者文件权限问题,或者是不是函数不支持问题,经过排查发现原来是万网的L1主机不支持fsockopen,在文件uc_c
- 其实这个话题已经在侧面写了好几篇深刻反思,用我自己几年工作实践的体会来看,性格决定了将来的发展。某些特质虽然可以掩饰,但在这之上必然不可能有
- 一、初始化CounterCounter支持3种形式的初始化,比如提供一个数组,一个字典,或单独键值对“=”式赋值。具体初始化的代码如下所示:
- 1.pickle 写: 以写方式打开一个文件描述符,调用pickle.dump把对象写进去 &
- MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型
- 本文介绍的函数其实是PHP手册上本来就有的,但是由于这些函数独立性较强,查找不易,所以单独介绍一下,方便查阅。 1. 获取所有可用的模块 -
- 记录了mysql 8.0.21 的安装配置方法,分享给大家。一、下载1、下载安装包mysql下载路径直接点击链接也可以下载:mysql 8.
- 在观看唐宇迪老师图像处理的课程中,其中有一个答题卡识别的小项目,在此结合自己理解做一个简单的总结。1. 项目分析首先在拿到项目时候,分析项目
- 前言硬要说这篇文章怎么来的,那得先从那几个吃野味的人开始说起…… 前天睡醒:假期还有几天;昨天睡醒:假期还有十几天;今天睡醒:假期还有一个月
- 问题:编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 +
- 一.re模块的查找方法:1.findall 匹配所有每一项都是列表中的一个元素import reret = re.f
- 为什么是三谈为什么是三谈呢?一是因为这真的是一个被说烂的话题,二是因为太师傅在n年前就写过这篇再谈iframe自适应高度。之所以再提该问题,
- 仿射密码思路:1、加解密公式:2、构造对应字典:3、代码实现构造字典,建立映射关系:# 构造字典,'A' --> 0
- Oracle关系型数据库管理系统是世界上流行的关系数据库,它是一个极其强大、灵活和复杂的系统,据说,在使用oracle时应有这样的思想,那就
- 产生batch数据输入data中每个样本可以有多个特征,和一个标签,最好都是numpy.array格式。datas = [data1, da
- 在DOS界面运行python的py文件我用的Notepad++编写代码,编写完后需要在DOS界面运行打开DOS界面按键盘上的WIN+R,输入
- 在编写一些小程序时,我需要比较两个字符串是否相同。一开始的思路是使用ord()函数获取字符的整数表示,但是调试过后发现,ord()函数传入的
- 在python类当中,经常会遇到@classmethod和@staticmethod这两个装饰器,那么到底它们的区别和作用是啥子呢?具体来看