python中的sum函数.sum(axis=1)

本文详细解释了NumPy中sum函数的使用方法,特别是通过axis参数来指定按行或按列求和的操作,并通过实例展示了不同情况下sum函数的行为。

看起来挺简单的样子,但是在给sum函数中加入参数。sum(a,axis=0)或者是.sum(axis=1) 就有点不解了

在我实验以后发现 我们平时用的sum应该是默认的axis=0 就是普通的相加 

而当加入axis=1以后就是将一个矩阵的每一行向量相加

例如:

import numpy as np

np.sum([[0,1,2],[2,1,3],axis=1)

结果就是:array([3,6])

下面是自己的实验结果,与上面的说明有些不符:

a = np.array([[0, 2, 1]])

print a.sum()
print a.sum(axis=0)
print a.sum(axis=1)

结果分别是:3, [0 1 2], [3]


b = np.array([0, 2, 1])

print b.sum()
print b.sum(axis=0)
print b.sum(axis=1)

结果分别是:3, 3, 运行错误:'axis' entry is out of bounds

 

c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]])

print c.sum()
print c.sum(axis=0)
print c.sum(axis=1)

结果分别是:19, [3 8 8], [ 3 14  2]

 

axis=0, 表示列。

axis=1, 表示行。

<think>我们正在讨论的是NumPy数组的`sum`方法,特别是`axis=1`的情况。根据用户提供的引用,我们可以总结如下: 引用[3]和引用[4]特别提到了`sum`函数的`axis`参数。引用[3]指出: - `axis=0`表示按列求和(垂直方向) - `axis=1`表示按行求和(水平方向) 引用[4]中的例子也印证了这一点:对于一个2x2的矩阵,`axis=1`会得到每一行的和,结果是一个形状为(2,)的数组。 因此,对于`result.sum(axis=1)`,其作用是对数组`result`在第一个轴(行方向)上进行求和,即对每一行内的所有元素求和。 ### 详细解释: 在NumPy中,数组可以有多个维度。对于一个二维数组(矩阵): - 第0轴(axis=0)代表行方向(垂直方向),沿着这个轴求和会将每一列的元素相加,结果是一个行向量(如果原数组是m×n,则结果形状为(n,))。 - 第1轴(axis=1)代表列方向(水平方向),沿着这个轴求和会将每一行的元素相加,结果是一个列向量(形状为(m,))。 例如,给定一个数组: ```python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) ``` - `arr.sum(axis=0)` 将得到:`[5, 7, 9]`(因为1+4=5, 2+5=7, 3+6=9) - `arr.sum(axis=1)` 将得到:`[6, 15]`(因为第一行1+2+3=6,第二行4+5+6=15) ### 高维数组的情况 对于更高维度的数组,`axis`参数可以指定任意维度。例如,一个三维数组(形状为`(a, b, c)`): - `axis=0`:沿着第一个维度求和,结果形状为`(b, c)` - `axis=1`:沿着第二个维度求和,结果形状为`(a, c)` - `axis=2`:沿着第三个维度求和,结果形状为`(a, b)` ### 原理 `sum`函数通过指定`axis`参数,告诉NumPy沿着哪个维度进行归约(reduction)。在指定轴上的所有值会被加在一起,从而减少一个维度(被指定的轴会消失,其他轴保留)。如果不指定`axis`,则对所有元素求和,得到一个标量。 ### 注意事项 1. **负数轴**:可以使用负数表示从后往前的轴。例如,在二维数组中,`axis=-1`等价于`axis=1`,`axis=-2`等价于`axis=0`。 2. **保持维度**:如果想要保持原数组的维度(例如,将求和结果仍然保持为一个列向量),可以使用`keepdims=True`参数。例如: ```python arr.sum(axis=1, keepdims=True) ``` 结果将是一个形状为`(2, 1)`的数组:`[[6], [15]]`。 ### 代码示例 根据引用[3]中的例子: ```python import numpy as np c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]]) # 对整个数组求和 print(c.sum()) # 输出:19 # 按列求和(axis=0) print(c.sum(axis=0)) # 输出:[3 8 8] (因为0+3+0=3, 2+5+1=8, 1+6+1=8) # 按行求和(axis=1) print(c.sum(axis=1)) # 输出:[3 14 2] (因为0+2+1=3, 3+5+6=14, 0+1+1=2) ``` ### 总结 - `result.sum(axis=1)`:对二维数组按行求和,返回一个一维数组,每个元素是原数组一行的和。 - 对于更高维数组,它将沿着第二个轴(索引为1的轴)求和。 这种方法在数据分析和科学计算中非常常见,例如计算每行数据的特征总和。 §§相关问题§§ 1. 在NumPy中,`sum`函数的`axis`参数对于三维数组的行为是怎样的? 2. 除了`sum`,NumPy中还有哪些常用的归约函数(如`mean`、`max`等)? 3. 如何在使用`sum`函数时保持原数组的维度(使用`keepdims`参数)? </think>### Python中`result.sum(axis=1)`的使用方法与原理 在NumPy中,`result.sum(axis=1)`是对数组**按行求和**的操作,其核心原理是通过指定`axis`参数决定求和维度。以下是详细解析: #### 1. **基本作用原理** - `axis=1`表示沿着数组的**第二个维度(行方向)** 求和 - 数学原理: $$ \text{result}[i] = \sum_{j=0}^{n-1} \text{arr}[i,j] $$ 其中 $i$ 为行索引,$j$ 为列索引 - **维度变化规律**: - 输入数组形状:$(m, n)$ - 输出数组形状:$(m,)$ (消除第二个维度,保留第一个维度)[^4] #### 2. **具体操作演示** 假设二维数组: ```python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) ``` | 操作 | 代码 | 输出结果 | 形状变化 | |------|------|----------|----------| | 按行求和 | `arr.sum(axis=1)` | `[6, 15, 24]` | $(3,3) \rightarrow (3,)$ | | 按列求和 | `arr.sum(axis=0)` | `[12, 15, 18]` | $(3,3) \rightarrow (3,)$ | 三维数组示例(引用[2]案例): ```python c = np.arange(24).reshape(2, 3, 4) # 形状(2,3,4) print(c.sum(axis=2)) # 输出形状(2,3) ``` - 在第三个维度(axis=2)上求和,相当于压缩深度维度 #### 3. **核心参数说明** | 参数 | 作用 | 取值范围 | |------|------|----------| | `axis` | 指定求和维度 | `0`(列方向), `1`(行方向), `-1`(最后维度)[^4] | | `dtype` | 输出数据类型 | 如`np.float32`, `np.int64` | | `keepdims` | 是否保留维度 | `False`(默认压缩维度), `True`(保留维度) | #### 4. **典型应用场景** 1. **数据统计**:计算每行数据的总和 ```python sales = np.array([[120, 80, 150], [95, 110, 200]]) daily_total = sales.sum(axis=1) # 输出: [350, 405] ``` 2. **特征工程**:合并多列特征 ```python features = np.random.rand(100, 5) # 100个样本,5个特征 combined_feature = features.sum(axis=1) # 生成新特征 ``` 3. **图像处理**:RGB通道合并 ```python image = np.random.randint(0, 256, (480, 640, 3)) grayscale = image.sum(axis=2) # 转换为灰度图 ``` #### 5. **注意事项** 1. **维度对应关系**: - 一维数组:`axis=0` 唯一选项 - 二维数组:`axis=0`(列和), `axis=1`(行和) - 三维数组:`axis=0`(深度和), `axis=1`(行和), `axis=2`(列和)[^2] 2. **空数组处理**: ```python empty_arr = np.array([], dtype=int) print(empty_arr.sum(axis=1)) # 引发ValueError ``` 3. **数据类型溢出**: ```python large_arr = np.ones((1000, 1000), dtype=np.int8) total = large_arr.sum(axis=1, dtype=np.int64) # 防止整数溢出 ``` ### 可视化理解 假设数组: $$ \text{arr} = \begin{bmatrix} a_{00} & a_{01} \\ a_{10} & a_{11} \end{bmatrix} $$ - `sum(axis=0)` → $[a_{00}+a_{10},\ a_{01}+a_{11}]$ - `sum(axis=1)` → $[a_{00}+a_{01},\ a_{10}+a_{11}]$ [^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值