You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Numpy更高效地反转数组的每隔一组行切片?

基于Numpy的高效实现方案

直接用Numpy的向量化操作就能搞定,比你转列表再循环的方式高效得多,尤其是矩阵规模大的时候优势更明显。这里给两种实现方式:

方法一:按组批量处理

import numpy as np

test_arr = np.arange(120).reshape(12, 10)
group_size = 4  # 每组4行,匹配你的需求
# 找出需要反转的组:第2、4...组(组索引从0开始,所以取1,3,...)
flip_group_indices = np.arange(1, test_arr.shape[0] // group_size, 2)

for idx in flip_group_indices:
    start_row = idx * group_size
    end_row = start_row + group_size
    # 选中该组所有行,反转每行元素后赋值回去
    test_arr[start_row:end_row] = test_arr[start_row:end_row, ::-1]

print(test_arr)

方法二:布尔索引一次性处理(更简洁高效)

import numpy as np

test_arr = np.arange(120).reshape(12, 10)
group_size = 4
# 给每行分配所属的组编号
row_group_ids = np.arange(test_arr.shape[0]) // group_size
# 生成布尔掩码:组编号为奇数的行需要反转
flip_mask = row_group_ids % 2 == 1
# 直接选中所有目标行,反转每行并赋值
test_arr[flip_mask] = test_arr[flip_mask, ::-1]

print(test_arr)

为什么这两种方法更好?

  1. 不用把Numpy数组转成列表,全程用Numpy原生操作,避免了Python循环的性能损耗——Numpy的向量化操作是底层C实现的,速度比纯Python循环快几个数量级。
  2. 代码更简洁,逻辑更清晰:直接针对“组”或者“需要反转的行”批量操作,不用逐行判断索引。

内容的提问来源于stack exchange,提问作者Asik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:15:32