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

如何无循环实现Numpy二维数组按对应行偏移量滚动?

实现Numpy数组按行自定义偏移量滚动

给定二维数组和对应行的偏移量:

import numpy as np
A = np.array([[0,0,1,1,0,0,0],[0,1,1,0,1,0,0],[1,0,0,1,1,0,0]])
shifts = np.array([2,4,1])

要实现每行按对应偏移量滚动且不使用for循环,可通过向量化索引高效完成:

n_rows, n_cols = A.shape
# 生成基础列索引
base_cols = np.arange(n_cols)
# 计算每行的目标列索引(广播运算+取模保证合法)
target_cols = (base_cols - shifts[:, np.newaxis]) % n_cols
# 索引得到滚动结果
rolled_A = A[np.arange(n_rows)[:, np.newaxis], target_cols]

输出结果:

print(rolled_A)
# [[0 0 0 0 0 1 1]
#  [1 0 0 0 1 1 0]
#  [0 0 1 1 0 0 1]]

核心逻辑

  • shifts[:, np.newaxis]将一维偏移量转为列向量,实现和基础列索引的广播运算
  • 用取模% n_cols确保偏移后的索引始终在数组列的合法范围内
  • 通过行索引矩阵np.arange(n_rows)[:, np.newaxis]和目标列索引矩阵组合,直接完成所有行的批量索引,完全规避Python循环

这种方案依赖Numpy底层的C实现,处理大规模数组时性能远优于循环写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:00:27