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

使用np.ogrid构造指数递增方阵时遭遇索引越界错误的求助

解决构造幂矩阵时的索引越界问题

问题背景

需要构造s×s矩阵$V_{0} = (c_{i}^{j - 1})$($i, j \in {1,…,s}$),具体列要求:

  • 第一列为$(0,0,…,0)$
  • 第二列为$(c_{1}, c_{2},…, c_{s})$
  • 最后一列为$((c_{1})^{s}, (c_{2})^{s},…, (c_{s})^{s})$

已定义含s个元素的向量$c$,尝试以下代码时出现索引越界错误:

import numpy as np
import random
s = 4
c = np.array([random.randint(1,10)]*(s))
print(c)
m = 4
n = 4 
i,j = np.ogrid[:m,:n]
V = c[i]*(j-1)
print(V)

报错信息:

IndexError                                Traceback (most recent call last)
<ipython-input-5-f744ca90252c> in <cell line: 9>()
      7 n = 4
      8 i,j = np.ogrid[:m,:n]
----> 9 V = c[i+1]*j
     10 print(V)

IndexError: index 4 is out of bounds for axis 0 with size 4

错误原因

  1. 索引越界:ogrid[:m,:n]生成的i是行索引矩阵,取值范围为0~3(s=4),i+1会得到1~4,但数组c的合法索引仅为0~3,索引4超出数组长度导致报错。
  2. 运算逻辑错误:需求是幂运算$c_{i}^{j-1}$,但代码中误用乘法*,不符合公式要求。
  3. 第一列处理偏差:按公式$c_{i}^{j-1}$,j=1时结果为1,但需求要求第一列为全0,需单独处理。

解决方法与修正代码

核心修正点

  • 去掉索引偏移i+1,直接用c[i]实现行元素的广播匹配
  • 将乘法替换为幂运算**
  • 单独将第一列设为全0,满足需求

修正后的代码:

import numpy as np
import random

s = 4
# 生成s个不同的随机数(原代码会生成重复值,可选优化)
c = np.array([random.randint(1, 10) for _ in range(s)])
print("向量c:", c)

# 生成行、列索引网格
i, j = np.ogrid[:s, :s]
# 构造幂矩阵:对应公式c_i^(j),j从0到s-1(对应需求中j'从1到s,j = j'-1)
V = c[i] ** j
# 将第一列替换为全0,符合需求
V[:, 0] = 0

print("构造的矩阵V0:\n", V)

补充说明

若需最后一列为$c_is$(与公式$c_i{j-1}$的$s-1$次方有偏差),可调整列索引范围,将幂运算的指数改为j+1,再修正第一列:

i, j = np.ogrid[:s, :s]
V = c[i] ** (j + 1)
V[:, 0] = 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:10:42