创建包含可变大小数组的字典列表

时间:2016-08-03 04:08:23

标签: python arrays list numpy dictionary

我正在尝试创建以下数据结构(我知道这不是最优的,但是根据我的输入数据是必要的):

包含相同两个键“100”字典的列表,“x”和“y”,其中每个键包含一个可变长度的numpy数组。 “y”包含一个向量,“x”包含一个图像数组,因此x的示例形状可以是10 x 3 x 10 x 50,或10个RGB大小为10 x的图像。对应y的示例形状将是10,因为x和y的初始长度需要相同。如果我只有8张图像,那么y的长度也是8,等等。

我想预先初始化这个结构,以便我可以用更改的数据值填充它,并这样做,这样我就可以根据单独的一块为每个字典设置可变长度“x”和“y”数组的大小输入数据我知道我可以用这样的东西设置字典:

imageArray = np.zeros(10,3,10,50)

vectorNumbers = np.zeros(10)

output = [{'x':imageArray,'y':vectorNumbers}]

所以这应该创建一个单词字典,但是如果我有一个类似于字典值“x”和“y”的数组的数组,我怎么能用这样的东西:

 output = [{'x':imageArray,'y':vectorNumbers} for k in range(listLength)]

但是要确保imageArray长度为[variable,3,10,50],vectorNumbers长度为[variable],其中variable是存储在另一个列表中的数字,由于上面的k计数器,我可以访问该列表。

2 个答案:

答案 0 :(得分:0)

我假设长度的输入列表是对的列表,或类似的东西。

input_lengths = [(12,17), (8,50), (2,7)]
pre_filled_list = [{'x' : [None]*x, 'y' : [None]*y} for x,y in input_lengths]
print(pre_filled_list)

预填充列表是一个字典列表,每个字典都有两个键;每个值都是所需长度的列表。

答案 1 :(得分:0)

怎么样:

import numpy as np

dims = [(42,43), (46,9), (47,49), (60,14)]
output = [{'x':np.zeros((x,3,10,50)), 'y':np.zeros((y,))} for (x,y) in dims]

print(len(output))              # 4, matches len(dims)

print(type(output[0]['x']))     # <type 'numpy.ndarray'>
print(type(output[0]['y']))     # <type 'numpy.ndarray'>

print(output[0]['x'].shape)     # (42, 3, 10, 50)
                                #  42 is from the first element of the first tuple in dims
print(output[0]['y'].shape)     # (43,)
                                #  43 is from the second element of the first tuple in dims

print(output[1]['x'].shape)     # (46, 3, 10, 50)
print(output[1]['y'].shape)     # (9,)

数组位于列表中的字典中。所有维度的零(我认为)你想要的。

如果你想要更接近你所拥有的东西,range(listLength),这四行产生与上面相同的输出:

xd = [42, 46, 47, 60]
yd = [43,  9, 49, 14]
listLength = 4

output=[{'x':np.zeros((xd[k],3,10,50)),'y':np.zeros((yd[k],))} for k in range(listLength)]