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

求N维扁平化数组取视图的起止索引通用计算公式

N维数组视图的扁平化起止索引通用计算方法

定义变量

先明确几个关键变量:

  • 数组维度列表:dims = (d₀, d₁, d₂, ..., dₙ₋₁),对应N维数组各维度的长度
  • 固定索引集合:假设我们固定前k个维度的索引为(i₀, i₁, ..., iₖ₋₁),要获取剩余N-k维的子数组视图
  • 扁平化数组总长度:total_len = d₀ × d₁ × ... × dₙ₋₁

通用公式

1. 视图长度(步长)

视图对应的扁平化数组片段长度,等于剩余未固定维度的乘积:

view_len = dₖ × dₖ₊₁ × ... × dₙ₋₁

2. 起始索引

先预计算每个维度的跨度(stride):strides[s] = dₛ₊₁ × dₛ₊₂ × ... × dₙ₋₁(即第s个维度之后所有维度的乘积)。
起始索引为各固定索引与对应跨度的乘积之和:

start_index = i₀ × strides[0] + i₁ × strides[1] + ... + iₖ₋₁ × strides[k-1]

3. 结束索引

结束索引直接由起始索引加上视图长度得到:

end_index = start_index + view_len

实例验证

2维数组(dims=(M,K))

取n_arr[i](固定第1个维度,k=1,i₀=i):

  • strides[0] = K
  • start_index = i × K
  • view_len = K
  • end_index = i×K + K,与题目给出的结果完全一致。

3维数组(dims=(D0,D1,D2))

  • 取n_arr[i][j](固定前2个维度,k=2,i₀=i, i₁=j):
    • strides[0] = D1×D2,strides[1] = D2
    • start_index = i×D1×D2 + j×D2
    • view_len = D2
    • end_index = i×D1×D2 + j×D2 + D2,对应扁平化数组中连续D2个元素,正好是3维数组(i,j,:)的所有元素。
  • 取n_arr[i](固定第1个维度,k=1,i₀=i):
    • start_index = i×D1×D2
    • view_len = D1×D2
    • end_index = i×D1×D2 + D1×D2,对应扁平化数组中连续D1×D2个元素,即3维数组的第i个二维子数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:37:28