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,那么就不能使用广播机制,比如说Ⅶ。


相关文章
|
16天前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
12天前
|
Python
NumPy 是 Python 中的一个重要的科学计算包,其核心是一个强大的 N 维数组对象 Ndarray
【6月更文挑战第18天】NumPy的Ndarray是科学计算的核心,具有ndim(维度数)、shape(各维度大小)、size(元素总数)和dtype(数据类型)属性。方法包括T(转置)、ravel()(扁平化)、reshape()(改变形状)、astype()(转换数据类型)、sum()(求和)及mean()(计算平均值)。更多属性和方法如min/max等可在官方文档中探索。
34 5
|
9天前
|
机器学习/深度学习 C语言 索引
数组计算模块NumPy(一)
NumPy是Python科学计算的核心库,提供高性能的数组和矩阵操作,支持大量数学函数。它包括一维、二维到多维数组,并通过C实现,优化了计算速度。
数组计算模块NumPy(一)
|
12天前
|
Python
NumPy 是 Python 的一个强大的科学计算库,它允许你创建各种类型的数组
【6月更文挑战第18天】**NumPy**是Python的科学计算库,用于创建和操作多维数组。常用数组生成方法包括:`np.array()`从列表转换为数组;`np.zeros()`生成全零矩阵;`np.ones()`创建全一矩阵;`np.linspace()`产生等差序列;`np.arange()`创建等差数列;以及`np.eye()`生成对角线为1的二维数组。更多方法可查阅NumPy官方文档。
24 2
|
9天前
|
索引 Python
数组计算模块NumPy(二)
NumPy教程概要:介绍数组切片、二维数组索引、重塑、转置和数组操作。讨论了切片语法`[start:stop:step]`,二维数组的索引方式,以及reshape方法改变数组形状。涉及转置通过`.T`属性或`transpose()`函数实现,数组增加使用`hstack()`和`vstack()`,删除用`delete()`。还提到了矩阵运算,包括加减乘除,并展示了`numpy.dot()`和`@`运算符的使用。最后提到了排序函数`sort()`、`argsort()`和`lexsort()`,以及NumPy的统计分析函数如均值、标准差等。
|
16天前
|
存储 API C语言
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
17天前
|
Python
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
|
2月前
|
存储 机器学习/深度学习 数据处理
NumPy:从初识到实战,探索Python科学计算的无限可能
NumPy:从初识到实战,探索Python科学计算的无限可能
45 0
|
2月前
|
程序员 开发工具 索引
图解Python numpy基本操作
图解Python numpy基本操作
|
2月前
|
存储 索引 Python
python学习——NumPy数值计算基础
NumPy基础知识概览:涉及nan(非数字)和inf(无穷)的概念,nan在文件读取或不适当计算时出现,inf在除0操作中出现。数组操作有深拷贝(a=b.copy())、浅拷贝(a=b[:])和引用(a=b)。创建数组方式多样,如`np.array()`、`np.arange()`等。数据类型转换如`np.float64()`、`np.int8()`。随机数生成包含均匀分布、正态分布等。数组索引和切片支持多维操作。改变数组形状用`reshape()`,展平用`ravel()`和`flatten()`。矩阵运算包括加减乘、转置、逆矩阵等。
43 2
python学习——NumPy数值计算基础