numpy的使用说明(五):数组的广播机制、数组元素的底层存储(一)

简介: numpy的使用说明(五):数组的广播机制、数组元素的底层存储(一)

一、数组的广播机制

1、先来看几个例子

a = np.array([1,3,2,5])
display(a.shape)
b = np.array([4])
display(b.shape)
c = np.arange(1,13).reshape(3,4)
display(c)
display(c.shape)


结果如下:

image.png


2、numpy官网关于广播机制的一句原话

 

In order to broadcast ,the size of the trailing axes for both arrays 
in an operation must either be the same size or one of them must be one.
"翻译如下"
    为了更够广播,进行操作的两个数组的尾部维度必须相同,或者其中一个数组的尾部维度是1。
    这个你可能会很蒙,毕竟是英译过来的,说不定还没有翻译到作者所写的那层意思,因此你简
    单了解一下这个就行。下面我们会对广播的使用做更为详细的总结!!!


1)什么是广播机制?

概念:广播(Broadcast)是numpy对不同形状(shape)的数组,进行数值计算的方式,对数组的算术运算通常在相对应的元素上进行。

注意:不同形状的数组元素之间进行数值计算,会触发广播机制;同种形状的数组元素之间,直接是对应元素之间进行数值计算。

2)数组与标量之间的运算

① 创建三个不同维度的数组


a = 2
display(a)
b = np.array([1,2])
display(b)
c = np.arange(1,7).reshape(3,2)
display(c)
c1 = np.arange(1,5).reshape(2,2)
display(c1)
d = np.arange(1,9).reshape(2,2,2)
display(d)


结果如下:

image.png

② 标量和一维、二维、三维数组之间的广播运算

image.png

③ 一维数组和二维数组之间的广播运算

image.png

⑤ 二维数组和三维数组元素之间的广播运算


image.png3)图示说明:什么样的数据才可以启用广播机制?

① 首先,我们分别构造了几个数组;

image.png

注意:对于一个标量来说,我们可以将这一个数字的形状看成是一行一列;对于一个一维数组,我们可以将它的形状看成是一行多列;


② 广播机制的详细图解

image.png

结论:


不同形状的数组之间能不能触发广播机制,主要看对应形状的每一个位置上的数字,是否满足如下要求。

① 要么对应位置上的数字完全一致,可以触发广播机制,比如说第Ⅵ组;

② 对应位置上的数字要是不一样,那么对应位置上,必须有一个数字是1,比如说Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ;

如果对应位置上的数字不仅不相同,且没有任何一个的数字为1,那么就不能使用广播机制,比如说Ⅶ。


相关文章
|
6月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
559 1
|
计算机视觉 Python
PIL图像转换为Numpy数组:技术与案例详解
本文介绍了如何将PIL图像转换为Numpy数组,以便利用Numpy进行数学运算和向量化操作。首先简要介绍了PIL和Numpy的基本功能,然后详细说明了转换过程,包括导入库、打开图像文件、使用`np.array()`或`np.asarray()`函数进行转换,并通过打印数组形状验证转换结果。最后,通过裁剪、旋转和缩放等案例展示了转换后的应用,以及如何将Numpy数组转换回PIL图像。此外,还介绍了处理base64编码图像的完整流程。
684 4
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
597 10
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
336 1
|
Python
使用 NumPy 进行数组操作的示例
使用 NumPy 进行数组操作的示例
330 2
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
558 4
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
859 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
6月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
356 0
|
8月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
844 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
8月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
675 0