2016-08-03 5 views
1

可変サイズの配列を保持する辞書のリストを作成する:私は次のようなデータ構造を(それは私が知っている、最適ではないのですが、私の入力データ与える必要がある)を作成しようとしている

100の辞書のリスト同じ2つのキー "x"と "y"で、各キーは可変長のnumpy配列を保持します。 「y」はベクトルを保持し、「x」は画像の配列を保持するので、xの例の形状は10 x 3 x 10 x 50、または10 x 50の10のRGB画像になります。対応するy xとyの最初の長さが同じである必要があるため、10になります。画像が8枚しかない場合は、yの長さも8などです。

この構造体を事前に初期化して、変更されたデータ値で塗りつぶして、サイズを設定できるようにします。別々の入力データに基づいて各辞書の可変長「x」および「y」配列を生成する。だから、単一の辞書を作成する必要がありますが、私は辞書の値の長さを持つ配列のようなものを持っている場合は「x」と「y」

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

vectorNumbers = np.zeros(10) 

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

:私はこのようなもので辞書を設定することができることを知っています、どのように私はこのようなものを使用することができます

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

をしかしimageArray長はあろうことを確認し、[変数、3,10,50]と長さは次のようになりvectorNumbers変数はに番号を保存されている[変数]、上記のkカウンタのおかげでアクセスできる別のリスト。

+0

これは、各辞書に同じ配列を置きます。 1つの値を変更すると、すべての値が変更されます。私はあなたがそれを望むとは思わない。各ディメンションに適切なディメンションを持つ新しい配列を作成する必要があります。リストや辞書では、ショートカットを取ることはできません。 – hpaulj

答えて

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) 

Pre_Filledリストは、それぞれ2つのキーを持つ辞書のリストです。各値は、希望する長さのリストではありません。

+0

'x'と' y'はリストではなく4dと1d numpyの配列であると考えられます。 – hpaulj

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)とあなたが持っていたものに近いものを、必要な場合は、これらの4行は上記と同じ出力を生成:

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)] 
関連する問題