当前位置: 首页 > wzjs >正文

网站导购话术关键词查询网

网站导购话术,关键词查询网,网站运营方案书,临时域名 wordpressNumPy-广播机制深入理解一、广播机制的基本概念二、广播的核心规则规则1:维度扩展规则2:形状匹配规则3:维度扩展为匹配大小三、广播机制的应用场景1. 数组与标量的运算2. 不同维度数组的运算3. 生成网格数据四、广播机制的注意事项1. 避免不必…

NumPy-广播机制深入理解

    • 一、广播机制的基本概念
    • 二、广播的核心规则
      • 规则1:维度扩展
      • 规则2:形状匹配
      • 规则3:维度扩展为匹配大小
    • 三、广播机制的应用场景
      • 1. 数组与标量的运算
      • 2. 不同维度数组的运算
      • 3. 生成网格数据
    • 四、广播机制的注意事项
      • 1. 避免不必要的维度扩展
      • 2. 注意广播的性能影响
      • 3. 警惕广播失败的情况

NumPy中数组运算通常要求参与运算的数组形状一致,但实际应用中我们经常需要对不同形状的数组进行操作,比如用一个标量去加一个数组,或者用一个一维数组去加一个二维数组,这时候NumPy的广播(Broadcasting)机制就发挥了重要作用。它能够自动调整不同形状的数组,使它们可以进行元素级运算,大大简化了代码编写,同时也保证了运算效率。

一、广播机制的基本概念

广播机制是NumPy中一种自动调整数组形状以进行元素级运算的规则。简单来说,当两个数组的形状不完全匹配时,NumPy会尝试将它们调整为相同的形状,以便进行运算。这种调整并不是真正地复制数据,而是通过虚拟扩展数组的方式实现的,因此不会额外占用大量内存。

例如,当我们用一个标量去加一个数组时,标量会被“广播”到数组的每个元素,从而实现元素级加法:

import numpy as np
arr = np.array([1, 2, 3, 4])
result = arr + 5
print(result)  # 输出:[6 7 8 9]

在这个例子中,标量5被广播成了一个与arr形状相同的数组[5, 5, 5, 5],然后再与arr进行加法运算。

二、广播的核心规则

NumPy的广播机制遵循一套严格的规则,只有满足这些规则的数组才能进行广播运算。具体规则如下:

规则1:维度扩展

当两个数组的维度数量不同时,维度较少的数组会在其前面(左侧)自动添加新的维度,直到两个数组的维度数量相同。

例如,一个形状为(3,)的一维数组和一个形状为(2, 3)的二维数组进行运算时,一维数组会被扩展为形状(1, 3)的二维数组,使两者的维度数量都为2:

arr1 = np.array([1, 2, 3])  # 形状:(3,)
arr2 = np.array([[4, 5, 6], [7, 8, 9]])  # 形状:(2, 3)
result = arr1 + arr2
print(result)
# 输出:
# [[ 5  7  9]
#  [ 8 10 12]]

这里,arr1先被扩展为[[1, 2, 3]](形状(1, 3)),然后再与arr2进行加法运算。

规则2:形状匹配

在维度数量相同后,逐个比较两个数组对应维度的大小。对于每个维度,若两个数组的大小相等,或者其中一个数组的该维度大小为1,则这两个数组在该维度上是兼容的;否则,广播失败,会抛出ValueError

例如:

  • 数组A形状为(2, 1, 3),数组B形状为(2, 4, 3),比较各维度:

    • 维度0:2 vs 2(相等,兼容)
    • 维度1:1 vs 4(其中一个为1,兼容)
    • 维度2:3 vs 3(相等,兼容)
      因此,AB可以广播,广播后的形状为(2, 4, 3)
  • 数组C形状为(2, 3),数组D形状为(2, 4),比较维度1:3 vs 4(既不相等,也没有一个为1),因此无法广播,运算时会报错。

规则3:维度扩展为匹配大小

对于兼容的维度,若其中一个数组的维度大小为1,会将该维度扩展为另一个数组对应维度的大小,以实现形状完全匹配。

例如,数组A形状为(2, 1, 3),数组B形状为(2, 4, 3),在维度1上,A的大小为1,B的大小为4,因此A的维度1会被扩展为4,最终两者形状都变为(2, 4, 3)

A = np.array([[[1, 2, 3]], [[4, 5, 6]]])  # 形状:(2, 1, 3)
B = np.array([[[7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]],[[19, 20, 21], [22, 23, 24], [25, 26, 27], [28, 29, 30]]])  # 形状:(2, 4, 3)
result = A + B
print(result.shape)  # 输出:(2, 4, 3)

三、广播机制的应用场景

广播机制在NumPy的各种元素级运算中都有广泛应用,以下是一些常见场景。

1. 数组与标量的运算

这是最常见的广播应用,标量会被广播成与数组相同的形状:

arr = np.array([[1, 2], [3, 4]])
print(arr * 2)  # 乘法:[[2 4] [6 8]]
print(arr + 10)  # 加法:[[11 12] [13 14]]
print(arr / 2)  # 除法:[[0.5 1. ] [1.5 2. ]]

2. 不同维度数组的运算

当需要对高维数组的某些维度进行统一操作时,广播机制可以简化代码。例如,对一个二维数组的每一列进行标准化(减去列均值,除以列标准差):

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
col_means = arr.mean(axis=0)  # 计算每列的均值:[4. 5. 6.]
col_stds = arr.std(axis=0)    # 计算每列的标准差:[2.44949 2.44949 2.44949]
# 标准化
standardized = (arr - col_means) / col_stds
print(standardized)
# 输出:
# [[-1.22474487 -1.22474487 -1.22474487]
#  [ 0.          0.          0.        ]
#  [ 1.22474487  1.22474487  1.22474487]]

这里,col_meanscol_stds是形状为(3,)的一维数组,与形状为(3, 3)arr进行运算时,会被广播成(3, 3)的数组,从而实现逐列标准化。

3. 生成网格数据

在绘制二维函数图像时,常需要生成网格数据,广播机制可以方便地实现这一操作:

x = np.linspace(0, 5, 6)  # [0, 1, 2, 3, 4, 5]
y = np.linspace(0, 5, 6)  # [0, 1, 2, 3, 4, 5]
X, Y = np.meshgrid(x, y)  # 生成网格数据,X和Y的形状都是(6, 6)
Z = X**2 + Y**2  # 计算每个网格点的函数值

np.meshgrid(x, y)的内部实现就利用了广播机制,将xy分别扩展为二维网格。

四、广播机制的注意事项

1. 避免不必要的维度扩展

虽然广播机制会自动扩展维度,但在实际编程中,显式地调整数组形状(如使用reshapenewaxis)可以使代码更清晰,避免歧义。例如,将一维数组转换为二维行向量或列向量:

arr = np.array([1, 2, 3])
row_vec = arr[np.newaxis, :]  # 行向量,形状:(1, 3)
col_vec = arr[:, np.newaxis]  # 列向量,形状:(3, 1)

2. 注意广播的性能影响

虽然广播不会真正复制数据,但在某些情况下,过度依赖广播可能会导致逻辑复杂,甚至在运算时产生临时数组,影响性能。对于大规模数据,建议在可能的情况下提前调整数组形状,使其直接匹配。

3. 警惕广播失败的情况

当两个数组的形状不满足广播规则时,会抛出ValueError: operands could not be broadcast together with shapes ...。此时,需要检查数组的形状是否正确,或通过reshape等方法调整形状后再进行运算。

总结
NumPy的广播机制是其灵活性和高效性的重要体现,它允许不同形状的数组进行元素级运算,大大简化了数据处理代码。通过遵循维度扩展、形状匹配和维度扩展为匹配大小这三条核心规则,我们可以判断两个数组是否能够进行广播运算,并利用广播机制实现标量与数组、不同维度数组之间的各种操作。

That’s all, thanks for reading~~
觉得有用就点个赞、收进收藏夹吧!关注我,获取更多干货~

http://www.dtcms.com/wzjs/477536.html

相关文章:

  • 如何添加wordpress主题seo网站优化策划书
  • 网站建设开什么发票百度霸屏推广
  • 单页网站制作网络营销八大工具
  • 广东商城网站建设网站域名费一年多少钱
  • 做婚恋网站赚钱吗地推拉新app推广接单平台免费
  • 销售网站建设成人技术培训班有哪些种类
  • 坂田做网站的公司企业推广软文
  • vs2008做html5网站大型集团网站建设公司
  • 自己网站做问卷调查问卷厦门百度快速优化排名
  • 怎么做公司网站互联网公司排名2021
  • 织梦网站导航浮动推广之家app下载
  • 有专门做英文字幕的网站吗青岛网站设计公司哪家好
  • 十大企业网站排行榜网络营销seo培训
  • 什么是seo优化的有哪些seo优化方案
  • 现在网站开发哪个语言好北京推广平台
  • 睢宁做网站公司资阳地seo
  • 济南网站开发推广百度广告优化
  • 网站改版引导网站在线推广
  • 做目录网站注意事项搜索引擎优化的目的是
  • 网站服务器租赁合同seo的优化方案
  • 网站建设谈客户说什么seo文章代写一篇多少钱
  • 做外贸都做哪些网站好免费下载新闻联播直播 今天
  • dedecms网站搬家b站大全永不收费2023入口在哪
  • 网站jianshe天津百度百科
  • 包牛牛网站怎么做搜索百度
  • 有做盆景的网站周口网站seo
  • 墨刀做网站上下滑动的交互电商网课
  • 网站搭建原理谷歌官方网站
  • vc 做网站源码北京网站优化
  • 建设网站经验在线种子资源库