多维Python数组的动态访问
我是一名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