2017-12-30 56 views
0

私は形状のPython配列(19,73984)を持っています。これは、272×272pxサイズの19個のグレーのフラット画像を表しています。私はこれを処理し、それをフィードフォワードニューラルネットワークに送りたいと思っていますが、バッチでフィードしたいと思っています。 私はforループで実行される何らかの種類の関数を持つことを期待しています。この関数は、データセットの配列、バッチサイズ、反復のインデックス値を受け取って、返されるアイテムの数と位置を知る必要があります。 EX:idatasetが掛け渡されるまで、特定の位置のための開始データのチャンクを返すために使用されるループの反復インデックスである def get_batch_data(i, dataset, batch_size):Python 3の分割配列を特定の位置からチャンクに変換

。 これを行うにはより良い方法がありますか、これを手伝ってもらえますか? ありがとう!

+0

なぜバッチ・ファイルのタグ?あなたのデータがすでにPython配列にある場合、Python環境に留まらないのはなぜですか? – jwdonahue

+0

私はあなたが何を暗示しているのか分かりません。 –

+0

質問は - 有用なチャンクを構成するもの - それはあなたがすでに19の画像アイテムの便利なチャックされた配列を持っているようです。それはあなたのためにはうまくいかないのですか/あなたは何の問題に対処しようとしていますか? –

答えて

1

TESTDATA:

bigArr = [[x,x+1,x+2,x+3] for x in range(1,1000,4) ] # 250 subLists 
簡単な

は、おそらくitertoolsからislice()次のようになります。

print(list(itertools.islice(bigArr,5,10)))) # start 5, stop 10, implicit 1 step 

独:islice()あなたのリストを取り、start値、stop値とstepper - あなたがワンライナーとしてしたいことをします。


また、あなたが望む要素のためのスライディングTrueウィンドウでitertools.compressを活用できます。

# only show 5 to 10th (excluded) element: 
varParts = itertools.compress(bigArr, # first list 
      [1 if x in range(5,10) else 0 for x in range(len(bigArr))]) # second list 

# consume iterator: 
print(list(varParts)) 

Compressは第二のリストにTrueに評価する最初のリストから値を返します - 第二のリスト所望の要素だけが評価する方法で構築されていますTrue

ドク:compress


またはすべての手でこのような大きなアレイのスライス使用してください:

def get_batch_data(i, arr, batchSize): 
    return arr[i:min(len(arr),i+batchSize)] 

次のように使用します。

for i in range(0,len(bigArr),5): 
    print(get_batch_data(i,bigArr,5)) # creates sub-slices - wich take memory 
+0

素晴らしいと完全な答え。ありがとうございます! –

関連する問題