【NumPy高级运用】NumPy的Matrix与Broadcast高级运用以及IO操作

简介: 【NumPy高级运用】NumPy的Matrix与Broadcast高级运用以及IO操作

Matrix高级运用

Matrix函数的作用是返回给定大小的标识矩阵。
单位矩阵是一个方阵。从左上角到右下角的对角线上的元素(称为主对角线)均为1,其他所有元素均为0。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/c157d43915c24198a13ee8904c348af4.png
在这里插入图片描述
大小为 5,类型位浮点型

import numpy.matlib 
import numpy as np 
print (np.matlib.identity(5, dtype =  float))

NumPy包含一个矩阵库NumPy.matlib。此模块中的函数返回一个矩阵,而不是数组对象。
矩阵是行和列元素的矩形阵列。
矩阵中的元素可以是数字、符号或数学表达式。以下是由6个数字元素组成的2行3列矩阵:
转置矩阵
在NumPy中,除了使用NumPy.transpose函数交换数组的维度外,还可以使用T属性。。
例如,通过使用t()函数,可以将具有m行和n列的矩阵转换为具有n行和m列的矩阵。

import numpy.matlib 
import numpy as np
 
print (np.matlib.empty((2,2)))

NumPy的Broadcast运用

广播是numpy对不同形状的数组执行数值计算的一种方式。数组上的算术运算通常在相应的元素上执行。
如果两个数组a和b的形状相同,即a.shape==b.shape,则a*b的结果是数组a和b的相应位的乘法。这需要相同的维数和每个维数的相同长度。

import numpy as np 
 
a = np.array([[ 0, 0, 0],
           [10,10,10],
           [20,20,20],
           [30,30,30]])
b = np.array([1,2,3])
bb = np.tile(b, (4, 1))  # 重复 b 的各个维度
print(a + bb)

让所有输入数组与具有最长形状的数组对齐。形状中不足的部分通过在前面添加1来填充。
输出阵列的形状是输入阵列形状的每个维度的最大值。
如果输入数组的维度的长度与输出数组的相应维度的长度相同或其长度为1,则可以使用该数组进行计算,否则会发生错误。
当输入数组的维度长度为1时,该维度中的第一组值将用于沿该维度的操作。
简单理解:比较两个数组的每个维度(如果一个数组没有当前维度,则忽略它),满足以下要求:
数组具有相同的形状。
当前维度的值相等。
当前维度的值之一为1。

import numpy as np 
 
a = np.array([[ 0, 0, 0],
           [10,10,10],
           [20,20,20],
           [30,30,30]])
b = np.array([0,1,2])
print(a + b)

IO操作

c 使用了关键字参数 sin_array

import numpy as np 
 
a = np.array([[1,2,3],[4,5,6]])
b = np.arange(0, 1.0, 0.1)
c = np.sin(b)
np.savez("runoob.npz", a, b, sin_array = c)
r = np.load("runoob.npz")  
print(r.files) 
print(r["arr_0"]) # 数组 a
print(r["arr_1"]) # 数组 b
print(r["sin_array"]) # 数组 c

Numpy可以在磁盘上读写文本数据或二进制数据。
NumPy为数组对象引入了一种简单的文件格式:npy。
npy文件用于存储重建阵列所需的数据、图形、数据类型和其他信息。
常见的IO功能有:
load()和save()函数是读取和写入文件数组数据的两个主要函数。默认情况下,数组以未压缩的原始二进制格式保存在扩展名为的文件中。npy。
savez()函数用于将多个数组写入文件。默认情况下,数组以未压缩的原始二进制格式保存在扩展名为.npz的文件中。
loadtxt()和savetxt()函数处理普通文本文件(.txt等)

import numpy as np 
 
b = np.load('outfile.npy')  
print (b)

文件:要保存的文件的扩展名为。npz。如果没有扩展。npz在文件路径的末尾,将自动添加扩展名。
Args:对于要保存的数组,可以使用关键字参数来命名数组。非关键字参数传递的数组将自动命名为arr_0、arr_1
Kwds:要保存的数组使用关键字名称。
NumPy数组的维数称为rank,rank是轴的数量,即数组的维数。一维阵列的秩是1,二维阵列的秩为2,依此类推。
在NumPy中,每个线性阵列称为轴,即维度。例如,二维阵列等效于两个一维阵列,第一个一维阵列中的每个元素都是一维阵列。所以一维数组是NumPy中的轴。第一个轴等效于基础数组,第二个轴是基础数组中的数组。轴的数量,秩,是阵列的维数。
在许多情况下,可以声明axis。轴=0,表示沿第0轴操作,即在每列上操作;轴=1,这意味着沿第一轴操作,即在每条线上操作。

相关文章
|
4月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 4
矩阵是由行和列构成的矩形数组,其元素可以是数字、符号或数学表达式。
37 4
|
4月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 2
不同于ndarray,matlib函数生成的是矩阵形式。教程中详细解释了矩阵的概念,并介绍了转置矩阵的实现方式,使用T属性或函数实现。此外,还展示了如何利用`matlib.empty()`创建指定形状的新矩阵,并可选择数据类型及顺序。最后通过示例演示了矩阵填充随机数据的方法。
41 3
|
4月前
|
存储 Python
NumPy 教程 之 NumPy IO 1
NumPy IO 教程介绍了如何使用 NumPy 读写文本及二进制数据。教程覆盖了 `.npy` 和 `.npz` 格式的文件操作,其中 `save()` 和 `load()` 函数用于单个数组的存取,而 `savez()` 则可以保存多个数组。文本文件处理则由 `loadtxt()` 和 `savetxt()` 完成。通过示例展示了 `numpy.save()` 函数的具体用法,并解释了其参数含义,如文件名、数组对象以及序列化选项等。
48 10
|
4月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 8
矩阵是由行和列构成的矩形数组,其元素可以是数字、符号或表达式。教程中讲解了如何使用`numpy.matlib.rand()`创建指定大小且元素随机填充的矩阵,并演示了矩阵与ndarray之间的转换方法。此外,还介绍了如何使用T属性进行矩阵转置。示例代码展示了创建矩阵、将其转换为ndarray以及再转回矩阵的过程。
51 9
|
4月前
|
存储 Python
NumPy 教程 之 NumPy IO 3
NumPy 支持读写文本与二进制数据,提供 `.npy` 格式保存 `ndarray`。常用函数包括:`save()`、`load()` 用于 `.npy` 文件的写入和读取;`savez()` 将多数组存为 `.npz` 格式;`savetxt()` 和 `loadtxt()` 处理 `.txt` 文件,支持自定义分隔符等选项。示例展示了如何使用 `savetxt()` 和 `loadtxt()` 进行数据存储及读取。
36 0
|
5月前
|
索引 Python
Python NumPy 广播(Broadcast)
Python NumPy 广播(Broadcast)
37 2
|
4月前
|
Python
NumPy 教程 之 NumPy 矩阵库(Matrix) 6
主要内容包括矩阵的概念、转置操作及单位矩阵生成。使用numpy.matlib提供的工具,如`numpy.matlib.identity()`可创建指定大小的单位矩阵,示例中创建了一个5x5的浮点型单位矩阵,并展示了其输出结果。
43 0
|
5月前
|
Python
NumPy 教程 之 NumPy 广播(Broadcast) 4
NumPy广播允许不同形状的数组执行数值运算。简言之,较短数组通过前置1扩展至最长数组形状,输出形状取各输入的最大维度值。数组可在各维度相等或任一为1的情况下进行运算,否则会引发"ValueError: frames are not aligned"错误。
49 3
|
5月前
|
Python
NumPy 教程 之 NumPy 广播(Broadcast) 2
NumPy广播是处理不同形状的数组运算的一种强大工具。若两个数组形状一致,运算将在对应元素间进行。但在形状各异时,NumPy会自动应用广播机制以实现运算。例如,对于一个形状为(4,3)的数组a与一个形状为(3,)的数组b执行加法操作时,b会被“广播”到与a相同的形状,使得每个元素都能与其他数组的相应元素进行运算。具体示例中,将b加到a的每一行,实现了有效的元素级操作。
49 0
|
7月前
|
缓存 NoSQL Redis
redis管道操作(节省网络IO开销)
pipeline中发送的每个command都会被server立即执行,如果执行失败,将会在此后的响应中得到信息;也就是pipeline并不是表达“所有command都一起成功”的语义,管道中前面命令失败,后面命令不会有影响,继续执行。
62 1