按元素相加
这是最基础的加法,即两个数组对应位置的元素相加,这要求两个数组的形状必须相同。

使用 运算符(最常用、最直观)
import numpy as np
# 创建两个形状相同的数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 使用 + 运算符进行按元素相加
c = a + b
print(f"数组 a: {a}")
print(f"数组 b: {b}")
print(f"a + b 的结果: {c}")
# 输出:
# 数组 a: [1 2 3]
# 数组 b: [4 5 6]
# a + b 的结果: [5 7 9]
使用 numpy.add() 函数
这是 运算符的函数形式,功能完全相同。
import numpy as np
a = np.array([10, 20, 30])
b = np.array([1, 2, 3])
c = np.add(a, b)
print(f"np.add(a, b) 的结果: {c}")
# 输出:
# np.add(a, b) 的结果: [11 22 33]
与标量(单个数字)相加
当数组与一个单独的数字(标量)相加时,NumPy 会将该数字加到数组的每一个元素上,这被称为广播。
import numpy as np
a = np.array([1, 2, 3, 4])
scalar = 10
# 数组与标量相加
b = a + scalar
print(f"数组 a: {a}")
print(f"标量: {scalar}")
print(f"a + scalar 的结果: {b}")
# 输出:
# 数组 a: [1 2 3 4]
# 标量: 10
# a + scalar 的结果: [11 12 13 14]
沿着特定轴(维度)求和
如果你想计算数组中某一列或某一行(或更高维度上的“切片”)的总和,而不是按元素相加,就需要使用 numpy.sum() 函数,并通过 axis 参数指定求和的轴。
axis 参数的规则:

axis=0:沿着垂直方向(跨行)操作,通常用于计算列的和。axis=1:沿着水平方向(跨列)操作,通常用于计算行的和。
示例:二维数组(矩阵)
import numpy as np
# 创建一个 3x3 的矩阵
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
print("原始矩阵:")
print(matrix)
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# 沿着 axis=0 求和 (计算每一列的总和)
sum_axis_0 = np.sum(matrix, axis=0)
print("\n沿着 axis=0 求和 (列和):")
print(sum_axis_0)
# 输出: [12 15 18] (1+4+7, 2+5+8, 3+6+9)
# 沿着 axis=1 求和 (计算每一行的总和)
sum_axis_1 = np.sum(matrix, axis=1)
print("\n沿着 axis=1 求和 (行和):")
print(sum_axis_1)
# 输出: [ 6 15 24] (1+2+3, 4+5+6, 7+8+9)
在数组末尾添加元素/行/列
如果你想扩展数组的形状,在末尾添加新的数据,可以使用以下几种方法。
numpy.append()
append() 函数会在数组的末尾添加元素,它会返回一个新的数组,而不是在原数组上进行修改。
import numpy as np
# 1. 添加元素到一维数组
arr_1d = np.array([1, 2, 3])
new_arr_1d = np.append(arr_1d, [4, 5, 6])
print(f"原始一维数组: {arr_1d}")
print(f"append 后的新数组: {new_arr_1d}")
# 输出:
# 原始一维数组: [1 2 3]
# append 后的新数组: [1 2 3 4 5 6]
# 2. 添加行到二维数组
arr_2d = np.array([
[1, 2, 3],
[4, 5, 6]
])
# 注意:要添加行,新行的形状必须与原数组的列数匹配
new_row = np.array([7, 8, 9])
new_arr_2d_rows = np.append(arr_2d, [new_row], axis=0)
print("\n原始二维数组:")
print(arr_2d)
print("\n添加行后的新数组:")
print(new_arr_2d_rows)
# 输出:
# 原始二维数组:
# [[1 2 3]
# [4 5 6]]
#
# 添加行后的新数组:
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# 3. 添加列到二维数组
new_col = np.array([[10], [20]]) # 注意:新列的形状必须匹配
new_arr_2d_cols = np.append(arr_2d, new_col, axis=1)
print("\n添加列后的新数组:")
print(new_arr_2d_cols)
# 输出:
# 添加列后的新数组:
# [[ 1 2 3 10]
# [ 4 5 6 20]]
numpy.concatenate()
concatenate() 也是用于合并数组,功能更强大,可以指定在哪个轴上进行合并。
import numpy as np
arr_a = np.array([[1, 2], [3, 4]])
arr_b = np.array([[5, 6]])
# 在 axis=0 (行方向) 上合并
# 注意:arr_b 需要是二维的,所以使用 [arr_b]
concatenated_rows = np.concatenate((arr_a, arr_b), axis=0)
print("concatenate 在 axis=0 上合并行:")
print(concatenated_rows)
# 输出:
# [[1 2]
# [3 4]
# [5 6]]
arr_c = np.array([[10], [20]])
# 在 axis=1 (列方向) 上合并
concatenated_cols = np.concatenate((arr_a, arr_c), axis=1)
print("\nconcatenate 在 axis=1 上合并列:")
print(concatenated_cols)
# 输出:
# [[ 1 2 10]
# [ 3 4 20]]
总结与选择
| 操作场景 | 推荐方法 | 示例 | 说明 |
|---|---|---|---|
| 按元素相加 | 运算符 | c = a + b |
最简单、最符合 Python 习惯,要求形状相同。 |
| 与标量相加 | 运算符 | c = a + 10 |
NumPy 广播机制,自动加到每个元素。 |
| 沿轴求和 | numpy.sum() |
np.sum(a, axis=0) |
计算指定维度(行或列)的总和。 |
| 在末尾添加元素 | numpy.append() |
np.append(a, [4,5]) |
返回新数组,灵活用于各种维度。 |
| 合并数组 | numpy.concatenate() |
np.concatenate((a, b), axis=0) |
更强大的合并功能,适合在任意轴上连接数组。 |
希望这个详细的解释能帮助你更好地理解和使用 NumPy 数组的添加操作!
