杰瑞科技汇

Python ndarray如何高效添加元素或维度?

按元素相加

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

Python ndarray如何高效添加元素或维度?-图1
(图片来源网络,侵删)

使用 运算符(最常用、最直观)

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 参数的规则:

Python ndarray如何高效添加元素或维度?-图2
(图片来源网络,侵删)
  • 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 数组的添加操作!

分享:
扫描分享到社交APP
上一篇
下一篇