我的输入是几个包含浮点数的不规则多维数组,看起来像这样:
[[[0.34774399349216734, -0.49837251730235765, 0.12359046385526962, 0.03052580675850769],
[0.9030134040537152, -0.7537158452634996, 0.2910583603657293, -0.22034711903454673]],
[[-0.9383578579687082, -0.2281750912629248, 0.052722557936115466]]]
每个列表中的层数和项目数在对象的实例中是相同的,但在对象之间会有所不同。
我需要的是依次为每个项目生成索引的方法,因此它们可以用于多个相同格式的列表。我现在迷失在哪里,甚至开始。
编辑:通过索引,我指的是一种访问不同列表中相应项目的方法。
答案 0 :(得分:0)
array = [[[1,2,3,4,5],[3,1,4,2,5],[2,1,4,6,3]],
[[1,2,3],[4,2,6]],
[[3,6,7],[7,4,6],[2,1,4]]]
您可以访问以下所有元素:
for lists in array:
for list in lists:
for num in list:
print num
所以要获得每个列表中的第一个元素:
for lists in array:
for list in lists:
print list[0]
或者,如果您已经知道数组的尺寸,为什么不直接引用它们:
array [0][0][0]
或使用您的符号:
array [i][j][k]
答案 1 :(得分:0)
numpy
允许您使用array[1,2,3]
等语法索引多维数组。它通过重写项getter来接受tuple
而不是整数或可清除对象(如列表和dicts)来实现此目的。但是numpy
在处理尺寸不同的数组时并不是那么优雅,所以你只需切换到numpy
就不会有太多的好运。
你可以使用类似的技巧。您的索引可以是tuple
(或任何序列,真的),然后它只是编写支持框架的情况。由于构建一个类可能很复杂,所以我所做的只是实现一个使用tuple
索引的函数,并且我已经为测试添加了枚举函数。
array = [[[0.34774399349216734, -0.49837251730235765, 0.12359046385526962, 0.03052580675850769],
[0.9030134040537152, -0.7537158452634996, 0.2910583603657293, -0.22034711903454673]],
[[-0.9383578579687082, -0.2281750912629248, 0.052722557936115466]]]
def array_enum(array):
"""enumerate multidimensional array returning indextuple, value for
each leaf node value.
"""
for i, item in enumerate(array):
if isinstance(item, list):
for subindex, val in array_enum(item):
yield (i,) + subindex, val
else:
yield (i,), item
def array_get_item(array, indextuple):
"""Use index values in indextuple to return item from
multidimensional array.
"""
for i in indextuple[:-1]:
array = array[i]
return array[indextuple[-1]]
for indextuple, val in array_enum(array):
orig_val = array_get_item(array, indextuple)
print(indextuple, val, orig_val, val == orig_val)
示例数组的结果是
(0, 0, 0) 0.34774399349216734 0.34774399349216734 True
(0, 0, 1) -0.49837251730235765 -0.49837251730235765 True
(0, 0, 2) 0.12359046385526962 0.12359046385526962 True
(0, 0, 3) 0.03052580675850769 0.03052580675850769 True
(0, 1, 0) 0.9030134040537152 0.9030134040537152 True
(0, 1, 1) -0.7537158452634996 -0.7537158452634996 True
(0, 1, 2) 0.2910583603657293 0.2910583603657293 True
(0, 1, 3) -0.22034711903454673 -0.22034711903454673 True
(1, 0, 0) -0.9383578579687082 -0.9383578579687082 True
(1, 0, 1) -0.2281750912629248 -0.2281750912629248 True
(1, 0, 2) 0.052722557936115466 0.052722557936115466 True