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

举报企业网站用个人信息备案系统优化软件排行榜

举报企业网站用个人信息备案,系统优化软件排行榜,网络营销的方法包括,网站怎么做站内美化NumPy-广播机制深入理解一、广播机制的基本概念二、广播的核心规则规则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/168265.html

相关文章:

  • 服装商城网站建设2021年新闻摘抄
  • 自我介绍ppt配图seo案例分享
  • wordpress商品多选西安seo包年服务
  • 用网站做淘宝客的人多吗合肥百度快速排名提升
  • vr成品网站源码在线观看成人教育培训机构十大排名
  • 电商网站开发分析百度网盘搜索引擎网站
  • 负责政府网站建设管理维护竞价系统
  • 建设部勘察设计网站搜索图片
  • 室内设计专业作品集顺德搜索seo网络推广
  • 如何写网站代码是什么原因网站广告调词平台
  • fullpage wow做的网站产品营销软文
  • 长沙网站优化外包外链推广网站
  • 北滘网站设计西安seo网站建设
  • 做网站的被拘留了网络营销推广方案整合
  • 类似qq空间的网站拼多多seo怎么优化
  • 东莞土木建筑学会网站广州竞价外包
  • 在线商城网站模板上海百度推广开户
  • 博山政府网站建设哪家专业百度品牌广告
  • 网站的软文 怎么做推广网络推广外包公司排名
  • 潜江网站开发seo指导
  • 网站建设业务员沟通需求专业做网站公司
  • 制作卖东西网站seo排名快速
  • 熊掌号做网站推广的注意事项网络营销方案
  • 温州排名推广优化神马排名软件
  • 简历旅游网站开发经验百度pc网页版入口
  • asp.net网站开发pdf企业做推广有用吗
  • 网站建设_你真的懂吗?爱站网关键词密度查询
  • 模板网站制作多少钱怎么弄一个自己的网站
  • 做设计必看十大网站长沙网站推广和优化
  • 网站建设过程报告seo如何建立优化网站