【numpy基础】--广播计算

这篇具有很好参考价值的文章主要介绍了【numpy基础】--广播计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

numpy的广播计算是指在多维数组上进行的一种高效计算方式。
它可以将计算任务分配到每个维度上,并且可以在计算过程中进行数据共享和同步,从而提高计算效率和精度。

广播计算在数值计算、科学计算、机器学习等领域都有广泛的应用。
例如,在数值计算中,广播计算可以用于求解大规模的非线性方程组;在科学计算中,广播计算可以用于模拟和预测自然现象;在机器学习中,广播计算可以用于分布式训练和推理等场景。

numpy中广播计算遵循3个严格的规则:

  1. 如果两个数组的维度数不相同,小维度数组的形状将会在最左边补1
  2. 如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度扩展以匹配另一个数组的形状
  3. 如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,那么会引发异常

广播规则一

比如一维数组和数字运算:

import numpy as np

arr = np.random.randint(1, 10, 5)
print(arr)
#运行结果
[9 8 2 9 7]

print(arr + 1)
#运行结果
[10  9  3 10  8]

print(arr * 2)
#运行结果
[18 16  4 18 14]

arr+1 时,1被自动扩充成[1, 1, 1, 1, 1],和 arr 一样结构的数组。
arr*2 时,同样,2被自动扩充成[2, 2, 2, 2, 2],和 arr 一样结构的数组。

二维数组和一维数组运算时:

arr1 = np.random.randint(1, 10, (3, 3))
print(arr1)
#运行结果
[[4 4 3]
 [8 2 1]
 [5 6 5]]

arr2 = np.random.randint(1, 10, 3)
print(arr2)
#运行结果
[3 9 2]

print(arr1 + arr2)
#运行结果
[[ 7 13  5]
 [11 11  3]
 [ 8 15  7]]

这种情况下,arr2arr1一样,都是3列,只是行数不一样,所以被自动扩展成:

[[3 9 2]
[3 9 2]
[3 9 2]]

然后再和arr1对应的位置进行加法运算。

广播规则二

规则二两个数组每个维度上的数量都不一样,比如如下两个二维数组的运算:

arr1 = np.random.randint(1, 10, (1, 3))
print(arr1)
#运行结果
[[6 6 7]]

arr2 = np.random.randint(1, 10, (3, 1))
print(arr2)
#运行结果
[[7]
 [6]
 [2]]

print(arr1 + arr2)
#运行结果
[[13 13 14]
 [12 12 13]
 [ 8  8  9]]

arr113的数组,所以arr1自动扩充了行,保持和arr2一致:

[[6 6 7]
[6 6 7]
[6 6 7]]

arr231的数组,所以arr2自动扩充了列,保持和arr1一致:

[[7 7 7]
[6 6 6]
[2 2 2]]

然后 arr1+arr2 得出了上面的结果。

广播规则三

规则三也是两个维度不一样的数组,只不过在不一样的那个维度上,它们的维度数都不是1
比如:

arr1 = np.random.randint(1, 10, (2, 3))
print(arr1)
#运行结果
[[7 9 3]
 [1 8 7]]

arr2 = np.random.randint(1, 10, (3, 1))
print(arr2)
#运行结果
[[8]
 [6]
 [7]]

print(arr1 + arr2)
#运行结果
#ValueError: operands could not be broadcast together with shapes (2,3) (3,1) 

arr123的数组,arr231的数组。
运算时,arr2是可以扩充成3的,但是arr1无法扩充成3,因为arr1行的维度和arr2虽然不一样不等于1

总结回顾

numpy的广播计算虽然简单,但是对我们的数据分析却很有意义:文章来源地址https://www.toymoban.com/news/detail-504358.html

  1. 提高计算效率:广播计算可以将计算任务分配到每个维度上,从而减少计算时间,提高计算效率。
  2. 减少内存占用:广播计算可以在多个维度上同时进行计算,从而减少需要存储的数据量,减少内存占用。
  3. 支持并行计算:numpy的广播计算可以支持多线程和多GPU并行计算,从而提高计算速度。
  4. 易于并发编程:numpy的广播计算提供了一种并发编程的方式,可以方便地实现多线程和多GPU并行计算。

到了这里,关于【numpy基础】--广播计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【numpy基础】--通用计算

    numpy 提供了简单灵活的接口,用于优化数据数组的计算。 通用计算最大的优势在于通过向量化操作,将循环推送至 numpy 之下的编译层,从而取得更快的执行效率。 numpy 的通用计算让我们计算数组时就像计算单独一个变量一样, 不用写循环去遍历数组中的各个元素。 比如,

    2024年02月09日
    浏览(44)
  • 【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作

    目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象(ndarray) 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 4、数组广播 5、排序操作 1. np.sort() 函数 2. np.argsort() 函数 3. ndarray.sort() 方法 4. 按列或行排序 5. np.lexsort() 函数 6. np.partition() 函数 7. np.argpartition() 函

    2024年02月08日
    浏览(67)
  • python库,科学计算与数据可视化基础,知识笔记(numpy+matplotlib)

    这篇主要讲一下数据处理中科学计算部分的知识。 之前有一篇pandas处理数据的。 讲一下这几个库的区别。 Pandas主要用来处理类表格数据(excel,csv),提供了计算接口,可用Numpy或其它方式进行计算。 NumPy 主要用来处理数值数据(尤其是矩阵,向量为核心的),本质上是纯

    2024年02月02日
    浏览(50)
  • SSID广播是什么意思?SSID广播基础知识介绍

    SSID是Service Set Identifier的简称,中文意思是:服务集标识,主要用来标识无线网络。SSID是一个比较笼统的概念,SSID包含了ESSID和BSSID,作用是用来区分不同的无线网络,SSID名称最多支持32字符。SSID一般是由无线路由器、AP等设备进行广播的,用户可以使用带有无线网卡的设备

    2024年02月08日
    浏览(44)
  • 计算机网络 | 广播与组播

    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 专栏:《Linux从小白到大神》《网络编程》 首先

    2024年02月05日
    浏览(37)
  • 计算机网络:子网地址 、广播地址 、主机地址范围 习题计算

    根据给定的IP地址和子网掩码,填写下面的表格。 IP地址 子网掩码 子网地址 广播地址 主机地址范围 28.85.245.8 255.255.255.0 (1) (2) (3) 153.50.6.27 255.255.255.128 (4) (5) (6) 200.12.45.123 255.255.255.224 (7) (8) (9) 计算结果: (1)28.85.245.0 (2)28.85.245.255 (3)28.85.245.1~28.85.245.254 (4)153.50.6.

    2024年02月08日
    浏览(45)
  • 特殊矩阵是指在某些特定场合下,其元素具有一定的特殊规律的矩阵

    特殊矩阵是指在某些特定场合下,其元素具有一定的特殊规律的矩阵。特殊矩阵包括对角矩阵、数量矩阵、三角矩阵、正交矩阵等等。下面我会列举几种常见的特殊矩阵及其特点: 对角矩阵:除了主对角线上的元素外,其他元素都为零的矩阵称为对角矩阵。对角矩阵的运算性

    2024年02月03日
    浏览(42)
  • Golang笔记:UDP基础使用与广播

    UDP是比较基础常用的网络通讯方式,这篇文章将介绍Go语言中UDP基础使用的一些内容。 本文中使用 Packet Sender 工具进行测试,其官网地址如下: https://packetsender.com/ UDP是一种面向无连接的通讯,抛开业务逻辑来说UDP使用上不需要像TCP那样先建立连接才能使用,收就是收、发就

    2024年02月09日
    浏览(40)
  • 【python】利用广播星历计算BDS卫星的位置

    前言 本程序为《卫星导航定位基础》大作业之二,功能为实现对广播星历文件的读取和处理,计算出北斗卫星的位置坐标,并绘制出二维和三维的卫星位置分布图。若需要对其他类型卫星数据处理,可根据本程序修改增进。 本文章部分代码借鉴于@学测绘的小杨【python】读取

    2024年04月13日
    浏览(38)
  • 计算机网络——主机IP地址、子网掩码、广播地址、网络数、主机数计算方法

    目录 一、概念 1.1 主机IP地址 1.2 子网掩码 1.3 广播地址 1.4 子网划分 二、计算 2.1 已知IP地址和子网掩码,计算网络地址和主机地址: 2.2 已知IP地址和子网掩码,计算广播地址: 2.3 已知子网掩码,计算主机数: 2.4 已知子网掩码,计算会产生多少个子网: 2.5 已知子网掩码,

    2023年04月24日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包