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

如何用NumPy的stride_tricks.as_strided反转数组?尝试后得无效结果

用NumPy的as_strided实现数组反转

可以用as_strided实现数组反转,但你当前的代码存在问题:你传入as_strided的inp_arr[15]是单个标量元素,而非原数组的视图。基于标量创建跨步数组时,程序会从该元素的内存位置向前(负步长方向)读取数据,但这些内存区域并不属于原数组,因此得到的是随机垃圾值。

正确实现代码

import numpy as np
from numpy.lib.stride_tricks import as_strided

elems = 16
inp_arr = np.arange(elems).astype(np.int8)

# 基于原数组最后一个元素的视图创建反转数组
reversed_arr = as_strided(inp_arr[-1:], 
                          shape=inp_arr.shape, 
                          strides=(-inp_arr.strides[0],))

print(reversed_arr)
print(reversed_arr.shape)
print(reversed_arr.strides)

输出结果

[15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0]
(16,)
(-1,)

关键说明

  • inp_arr[-1:]是原数组最后一个元素的视图,它指向原数组最后一个元素的内存地址,而非复制单个元素。
  • 设置步长为-inp_arr.strides[0](这里即-1,因为int8类型每个元素占1字节),意味着每次向前移动1字节读取下一个元素。
  • 保持shape与原数组一致,就能完整读取原数组的所有元素并实现反转。

⚠️ 注意:as_strided直接操作内存,若步长或shape设置不当,很容易读取到数组外的内存区域,引发未定义行为。非必要场景下,优先使用arr[::-1]这种更安全的索引方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:22:50