Python NumPy不同维度数组运算与多维求和详解

橘子海
橘子海
发布时间:2026-10-14| 3人浏览过
原创

本文详解Python NumPy中不同维度数组的运算规则,包括标量乘法与高维数组的对位运算。重点解析np.sum函数在指定axis参数时如何沿不同维度进行求和、求最值及均值,通过具体代码示例展示第0至-1维度的计算差异,帮助开发者掌握高维数据处理技巧。

NumPy数组支持与标量的直接运算。

当NumPy矩阵与标量进行加减乘除或幂运算时,标量会自动广播至矩阵的每个元素。例如,对形状为[2,2,3]的数组arr1执行乘以5、减5或平方操作,结果均为对应元素分别进行该数学运算,保持原数组维度不变。


>>>import numpy as np
>>>arr1 = np.arange(12).reshape([2,2,3])
>>>arr1
array([[[ 0, 1, 2],
  [ 3, 4, 5]],
  [[ 6, 7, 8],
  [ 9, 10, 11]]])
>>>arr1*5
array([[[ 0, 5, 10],
  [15, 20, 25]],
  [[30, 35, 40],
  [45, 50, 55]]])
>>>arr1-5
array([[[-5, -4, -3],
  [-2, -1, 0]],
  [[ 1, 2, 3],
  [ 4, 5, 6]]])
>>>arr1**2
array([[[ 0, 1, 4],
  [ 9, 16, 25]],
  [[ 36, 49, 64],
  [ 81, 100, 121]]])

高维数组与低维数组的兼容运算规则。

若arr1为高维数组,且arr2的维度与arr1的某个子数组维度完全一致,则两者可进行逐元素运算。例如,形状为[2,2,3]的arr1与形状为[3]的arr2相乘,或形状为[2,3]的arr3与arr1相乘,均遵循广播机制,将低维数组扩展以匹配高维数组的子结构进行计算。


PyDev console: starting.
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) 
[Clang 6.0 (clang-600.0.57)] on darwin
>>>import numpy as np
>>>arr1 = np.arange(12).reshape([2,2,3])
>>>arr1
array([[[ 0, 1, 2],
  [ 3, 4, 5]],
  [[ 6, 7, 8],
  [ 9, 10, 11]]])
>>>arr2 = np.array([2,2,2])
>>>arr2
array([2, 2, 2])
>>>arr1*arr2
array([[[ 0, 2, 4],
  [ 6, 8, 10]],
  [[12, 14, 16],
  [18, 20, 22]]])
>>>arr3 = np.arange(6).reshape([2,3])
>>>arr1*arr3
array([[[ 0, 1, 4],
  [ 9, 16, 25]],
  [[ 0, 7, 16],
  [27, 40, 55]]])

补充:Python中按指定维度进行求和、求最值及均值计算。

随着变量维度增加,理解按不同维度求和的逻辑变得复杂。掌握单一维度的求和逻辑后,其他维度的操作即可类推。以下通过具体示例展示不同axis参数下的计算结果。


a=range(27)
a=np.array(a)
a=np.reshape(a,[3,3,3])

定义一个包含0到26整数的三维数组a,其形状为[3,3,3]。


array([[[ 0, 1, 2],
  [ 3, 4, 5],
  [ 6, 7, 8]],
  [[ 9, 10, 11],
  [12, 13, 14],
  [15, 16, 17]],
  [[18, 19, 20],
  [21, 22, 23],
  [24, 25, 26]]])

执行np.sum(a, -1)操作,其中-1代表最后一个维度(即第2维)。该操作沿最后一个维度求和,输出结果为形状为[3,3]的二维数组,每个元素是原数组对应切片在最后一维的和。


array([[ 3, 12, 21],
[30, 39, 48],
[57, 66, 75]])

执行np.sum(a, 2)操作,指定沿第2个维度(索引从0开始)求和。由于第-1维与第2维在此语境下指代同一维度,输出结果与指定-1时相同,得到形状为[3,3]的数组。


array([[ 3, 12, 21],
  [30, 39, 48],
  [57, 66, 75]])

执行np.sum(a, 0)操作,指定沿第0个维度(最外层)求和。该操作将三个[3,3]的子矩阵对应位置元素相加,输出结果仍为形状[3,3]的数组。


array([[27, 30, 33],
  [36, 39, 42],
  [45, 48, 51]])

执行np.sum(a, 1)操作,指定沿第1个维度(中间层)求和。该操作将每个[3,3]切片在第二维度的元素相加,输出结果同样为形状[3,3]的数组。


array([[ 9, 12, 15],
  [36, 39, 42],
  [63, 66, 69]])

需注意,第-1个维度实际上指代最后一个维度。在三维数组中,第-1维等同于第2维。明确axis参数的正负索引含义是正确进行多维统计的关键。

以上内容为个人经验总结,旨在提供实用参考。如有错误或未涵盖之处,欢迎指正。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。