多维Python数组的动态访问

1 投票
2 回答
953 浏览
提问于 2025-04-17 04:27

我是一名Python新手。对于如何动态访问数组元素,我感到很困惑。

我有一个列表 b = [1, 2, 5, 8],这个列表是我动态获取的,所以它的长度可能会变化。利用这个列表,我需要更新一个多维数组,像这样 mArr[1][2][5][8]。这个列表的长度和数组的维度是匹配的,正如例子所示。

基本上,我想找到一种方法,可以根据列表 "b" 来访问多维数组,形式是:marr[b]。这个 m 数组也是动态创建的。

我试着查找了一些关于numpy的教程,但还是没能找到解决方案。我是不是漏掉了什么?

提前谢谢你们。

2 个回答

1

你可以创建一个这样的函数:

def array_update(b, marr, value):
  if len(b) > 1:
    return array_update(b[1:], marr[b[0]], value)
  marr[b[0]] = value

假设有一个数组 b=[1,2,5,8],如果你想把 mArr[1][2][5][8] 的值设置为 foo,你可以这样调用:

array_update(b, mArr, 'foo')
2

如果维度是 [1,2,5,8],那么你可以在每个维度上使用数字 0, 0..1, 0..4, 0..7

Numpy 让你可以用元组来访问这些位置:

shape = [1, 2, 5, 8]
pos = [0, 1, 1, 3]

my_array = np.ones(shape)
my_array[tuple(pos)] # will return 1

撰写回答