我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解PythonNumPy中矩阵和通用函数的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解PythonNumPy中矩阵和通用函数的使用

在NumPy中,矩阵是 ndarray 的子类,与数学概念中的矩阵一样,NumPy中的矩阵也是二维的,可以使用 mat 、 matrix 以及 bmat 函数来创建矩阵。

一、创建矩阵

mat 函数创建矩阵时,若输入已为 matrix 或 ndarray 对象,则不会为它们创建副本。 因此,调用 mat() 函数和调用 matrix(data, copy=False) 等价。

1) 在创建矩阵的专用字符串中,矩阵的行与行之间用分号隔开,行内的元素之间用空格隔开。使用如下的字符串调用 mat 函数创建矩阵:

import numpy as np

A = np.mat('1 2 3; 4 5 6; 7 8 9')
print("Creation from string:", A)

运行结果:

Creation from string: 
[[1 2 3]
 [4 5 6]
 [7 8 9]]

2)用T属性获取转置矩阵

print("transpose A:", A.T)  # 用T属性获取转置矩阵

3)用I属性获取逆矩阵

print("Inverse A:", A.I)  # 用I属性获取逆矩阵

4)用NumPy数组进行创建矩阵

B = np.mat(np.arange(9).reshape(3, 3))
print("Creation from array:", B)#使用NumPy数组进行创建

上述运行结果:

Creation from string: 
[[1 2 3]
 [4 5 6]
 [7 8 9]]
transpose A: 
[[1 4 7]
 [2 5 8]
 [3 6 9]]
Inverse A:
 [[ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]
 [-6.30503948e+15  1.26100790e+16 -6.30503948e+15]
 [ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]]
Creation from array: 
[[0 1 2]
 [3 4 5]
 [6 7 8]]

二、从已有矩阵创建新矩阵

希望利用一些已有的较小的矩阵来创建一个新的大矩阵。这可以用 bmat 函数来实现。这里的 b 表示“分块”, bmat 即分块矩阵(block matrix)。

1)先创建一个3*3的单位矩阵:

C = np.eye(3)
print("C:",C)

运行结果:

C: 
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

2)创建一个与C同型的矩阵,乘以2

D = 2 * C
print ("D:",D)

运行结果:

D: 
[[2. 0. 0.]
 [0. 2. 0.]
 [0. 0. 2.]]

3)使用字符串创建复合矩阵:

字符串的格式与 mat 函数中一致,只是在这里你可以用矩阵变量名代替数字:

print("Compound matrix\n", np.bmat("C D;C D"))

运行结果:

Compound matrix:
 [[1. 0. 0. 2. 0. 0.]
 [0. 1. 0. 0. 2. 0.]
 [0. 0. 1. 0. 0. 2.]
 [1. 0. 0. 2. 0. 0.]
 [0. 1. 0. 0. 2. 0.]
 [0. 0. 1. 0. 0. 2.]]

三、通用函数

通用函数的输入是一组标量,输出也是一组标量,它们通常可以对应于基本数学运算,如加、减、乘、除等。

1、使用NumPy中的 frompyfunc 函数,通过一个Python函数来创建通用函数,步骤如下:

1)定义一个回答某个问题的Python函数

2)用 zeros_like 函数创建一个和 a 形状相同,并且元素全部为0的数组 result

3)将刚生成的数组中的所有元素设置其值为42

2、在 add 上调用通用函数的方法

通用函数并非真正的函数,而是能够表示函数的对象。通用函数有四个方法,不过这些方法只对输入两个参数、输出一个参数的ufunc对象有效,例如 add 函数。

其他不符合条件的ufunc对象调用这些方法时将抛出 ValueError 异常。因此只能在二元通用函数上调用这些方法。以下将逐一介绍这4个方法:

 reduce()、accumulate()、 reduceat()、outer()

1) 沿着指定的轴,在连续的数组元素之间递归调用通用函数,即可得到输入数组的规约(reduce)计算结果。

对于 add 函数,其对数组的reduce计算结果等价于对数组元素求和。调用reduce 方法:

a = np.arange(9)
print("Reduce:", np.add.reduce(a)) #调用add函数的reduce方法

运行结果:

Reduce 36

2) accumulate 方法同样可以递归作用于输入数组

在 add 函数上调用 accumulate 方法,等价于直接调用 cumsum 函数。在 add 函数上调用 accumulate 方法:

print( "Accumulate", np.add.accumulate(a)) #调用add函数的accumulate方法

运行结果:

Accumulate [ 0  1  3  6 10 15 21 28 36]

3)educeat 方法需要输入一个数组以及一个索引值列表作为参数。

print ("Reduceat", np.add.reduceat(a, [0, 5, 2, 7]))

educeat 方法的作用是,在数列a中,分别计算索引间的累加,比如上述的 [0, 5, 2, 7],分别计算索引0-5,5-2(5>2,所以直接取索引为5的数据),2-7,7-(-1) 等四组序列形成的

比如,0-5就是计算A-E列中的数据,结果为10;5-2,直接取索引为5,即F的数据5;2-7,即B-G的计算结果为20;7-(-1)即索引7到最后,也即H、I的计算结果为15。

4)outer 方法

返回一个数组,它的秩(rank)等于两个输入数组的秩的和。它会作用于两个输入数组之间存在的所有元素对。在 add 函数上调用 outer 方法:

print("Outer:\n", np.add.outer(np.arange(3), a))

运行结果:

Outer:
 [[ 0  1  2  3  4  5  6  7  8]
 [ 1  2  3  4  5  6  7  8  9]
 [ 2  3  4  5  6  7  8  9 10]]

四、算术运算

在NumPy中,基本算术运算符+、-和 * 隐式关联着通用函数 add 、 subtract 和 multiply ,对NumPy数组使用这些算术运算符时,对应的通用函数将自动被调用。除法包含

的过程则较为复杂,在数组的除法运算中涉及

三个通用函数 divide 、 true_divide 和floor_division ,以及两个对应的运算符 / 和 // 。

1、除法运算:

import numpy as np

a = np.array([2, 6, 5])
b = np.array([1, 2, 3])

print("Divide:\n", np.divide(a, b), np.divide(b, a))

除了divide()函数外,还有floor_divide(),以及运算符‘/’和‘//’,(‘/’和‘//’分别和divide和floor_divide作用一样)如下代码:

import numpy as np

a = np.array([2, 6, 5])
b = np.array([1, 2, 3])

print("Divide:\n", np.divide(a, b), np.divide(b, a))
print("True Divide:\n", np.true_divide(a, b), np.true_divide(b, a))#回除法的浮点数结果而不作截断

print("Floor Divide:\n", np.floor_divide(a, b), np.floor_divide(b, a))  #返回整数结果
c = 3.14*b
print("Floor Divide2:\n", np.floor_divide(c, b), np.floor_divide(b, c)) #返回整数结果

print( "/ operator:\n", a/b, b/a)  # "/"运算符相当于调用 divide 函数

print( "// operator:\n", a//b, b//a) #运算符//对应于floor_divide 函数
print( "// operator2:\n", c//b, b//c)

运行结果:

Divide:
 [2.         3.         1.66666667] [0.5        0.33333333 0.6       ]
True Divide:
 [2.         3.         1.66666667] [0.5        0.33333333 0.6       ]
Floor Divide:
 [2 3 1] [0 0 0]
Floor Divide2:
 [3. 3. 3.] [0. 0. 0.]
/ operator:
 [2.         3.         1.66666667] [0.5        0.33333333 0.6       ]
// operator:
 [2 3 1] [0 0 0]
// operator2:
 [3. 3. 3.] [0. 0. 0.]

2、模运算

计算模数或者余数,可以使用NumPy中的 mod 、 remainder 和 fmod 函数。当然,也可以使用 % 运算符。这些函数的主要差异在于处理负数的方式。

a = np.arange(-4, 4)
print('a:',a)
print ("Remainder", np.remainder(a, 2)) # remainder 函数逐个返回两个数组中元素相除后的余数
print ("Mod", np.mod(a, 2))  # mod 函数与 remainder 函数的功能完全一致
print ("% operator", a % 2)  # % 操作符仅仅是 remainder 函数的简写

print ("Fmod", np.fmod(a, 2))# fmod 函数处理负数的方式与 remainder 、 mod 和 % 不同

运行结果:

a: [-4 -3 -2 -1  0  1  2  3]
Remainder [0 1 0 1 0 1 0 1]
Mod [0 1 0 1 0 1 0 1]
% operator [0 1 0 1 0 1 0 1]
Fmod [ 0 -1  0 -1  0  1  0  1]

实际代码运行如下:

以上就是详解Python NumPy中矩阵和通用函数的使用的详细内容,更多关于NumPy矩阵 通用函数的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解PythonNumPy中矩阵和通用函数的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python NumPy中矩阵和通用函数如何使用

这篇“Python NumPy中矩阵和通用函数如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python NumPy
2023-07-02

OpenGL的glPushMatrix()和glPopMatrix()矩阵栈顶操作函数详解

OpenGL中的glPushMatrix()和glPopMatrix()函数用于操作矩阵栈顶的矩阵。1. glPushMatrix()函数将当前矩阵(模型视图矩阵或投影矩阵)压入矩阵栈的栈顶。- 当前矩阵是指通过glMatrixMode()
2023-09-21

详解使用Numpy库求解矩阵的逆的步骤

利用Numpy库求解矩阵逆的步骤详解概述:矩阵逆是线性代数中一个重要的概念,它是指对于一个方阵A,如果存在一个方阵B,使得A与B的乘积为单位矩阵(即AB=BA=I),则称B是A的逆矩阵,记为A^{-1}。矩阵逆的求解在很多实际问题中具有重
详解使用Numpy库求解矩阵的逆的步骤
2024-01-24

numpy矩阵乘法中的multiply,matmul和dot的使用

本文主要介绍了numpy矩阵乘法中的multiply,matmul和dot的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-15

如何在R语言中使用matrix函数生成矩阵

今天就跟大家聊聊有关如何在R语言中使用matrix函数生成矩阵,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在R语言中可以使用matrix()函数来创建矩阵,其语法格式如下:matr
2023-06-08

matlab中怎么用unique函数去除矩阵重复的行

在Matlab中,可以使用unique函数去除矩阵重复的行。具体步骤如下:假设有一个矩阵A,要去除其中重复的行。使用unique函数对矩阵A应用'rows'选项,表示按行进行唯一性比较。将去除重复行后的矩阵赋值给新的变量B。下面是具体的
2023-10-23

tensor.squeeze函数和tensor.unsqueeze函数的使用详解

本文主要介绍了tensor.squeeze函数和tensor.unsqueeze函数的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-09

python中使用numpy包的向量矩阵相乘np.dot和np.matmul实现

本文主要介绍了python中使用numpy包的向量矩阵相乘np.dot和np.matmul实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-15

Mysql中 IFNULL函数的使用详解

目录概念语法Demo 举例说明创建表加入数据举例一举例二举例三举例四概念在mysql中IFNULL() 函数用于判断第一个表达式是否为 NULL,如果第一个值不为NULL就执行第一个值。第一个值为 NULL 则返回第二个参数的值。语法
Mysql中 IFNULL函数的使用详解
2024-09-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录