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

Numpy二维数组负索引至正索引切片:如何实现首尾循环切片?

解决Numpy二维数组循环切片问题

你的代码返回空数组的原因是:Numpy的切片语法start:end默认步长为1,当起始索引的位置在结束索引之后时(比如行切片-1:1,-1对应第4行,1对应第2行),切片会返回空序列——因为默认步长下无法从后往前取元素。即使指定负步长,m[-1:1:-1, -1:1:-1]也会取第4、3行和第4、3列,不符合你的需求。

要实现末尾元素紧跟开头元素的循环效果,直接使用整数数组索引指定需要的行和列即可,这是最直接的方式:

import numpy as np

arr = [[1, 2, 3, 4], 
       [5, 6, 7, 8], 
       [9, 10, 11, 12], 
       [13, 14, 15, 16]]

m = np.array(arr)

# 选取最后一行(-1)和第一行(0),再在这些行中选取最后一列(-1)和第一列(0)
result = m[[-1, 0], :][:, [-1, 0]]
print(result)

输出结果:

[[16 13]
 [4 1]]

也可以用np.ix_函数避免索引广播问题,写法更简洁:

result = m[np.ix_([-1, 0], [-1, 0])]

这个方法的核心是精准定位目标元素:

  • [-1, 0]明确指定要取最后一行和第一行
  • [:, [-1, 0]]在选中的行里,取最后一列和第一列
    这样就直接得到了你期望的循环切片结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:22:47