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

如何将两元素列表转换为NumPy二维数组的元素索引而非行索引

核心原理说明

numpy的多维索引规则里:

  • 方括号内传入list类型的[i,j]时,会被识别为沿第一维度的高级索引,返回第i、j两行
  • 方括号内传入tuple类型的(i,j),或是逗号分隔的两个独立参数i,j时,会被识别为多维度索引,返回i行j列的单个元素

你提到的*是Python的序列解包运算符,作用是把可迭代对象的元素按位置拆分为独立参数:arr[*[i,j]]等价于arr[i,j],本质就是把列表的两个元素拆开作为索引的两个独立参数,自然就能取到单个元素。

方案1:单索引解包写法

首先你原代码的循环逻辑有误:for i in path()时,i本身就是[i_n,j_n]格式的索引对,不需要再通过path()[i]取值。
修改后的循环写法如下:

import numpy as np
grid = np.full((3,3), 1)

def path():
    # 示例返回值
    return [[0,1], [2,2], [1,0]]

# 写法1:用*解包
for idx in path():
    grid[*idx] = 0

# 写法2:转tuple,兼容性更好(适配旧版本Python)
for idx in path():
    grid[tuple(idx)] = 0

方案2:高性能向量化写法(高频执行首选)

循环操作在索引量较大时性能很低,直接用numpy向量化操作可以避免Python层循环,性能提升10~100倍不等,完全适配高频执行场景:

indices = np.array(path())
# 直接批量对所有索引位置赋值
grid[indices[:, 0], indices[:, 1]] = 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:05