Python NumPy不同维度数组运算与多维求和详解
本文详解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参数的正负索引含义是正确进行多维统计的关键。

以上内容为个人经验总结,旨在提供实用参考。如有错误或未涵盖之处,欢迎指正。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









