2016-02-09 19 views
5
training_images = np.array([i for i in images if i not in validation_images]) 

上記は間違っています(下記のコメントに記載されています)。これを行う正しい方法と速い方法は何ですか?ナンシーアレイは一部の要素を除外

私validation_imagesはちょうど

validation_images = images[::6] 

で、画像の形状が(60000、784)です。 これは配列の数が少ないです。

現在の方法は遅すぎるため許容できません。

私はいつもあなたが考えることができ、そのようなことのために boolean masksを使用してい
+0

注:['配列の配列は意味がありません](http://stackoverflow.com/questions/18320624/how-does-contains-work-for-ndarrays)、あなたの現在のコードはおそらく実行していませんとにかくあなたが望むもの。また、重複の影響をどのように受けるべきですか?インデックスが6の倍数であるすべての行を削除したいだけですか? – user2357112

+0

私はそれを知らなかった。しかし、とにかく私はそこでやろうとしていたことをしたい。うん、私は重複を気にしない、私はちょうど私の検証セットの6行ごとに1つの行を削除したい。 –

答えて

4

# Mask every sixth row 
mask = (np.arange(images.shape[0]) % 6) != 0 

# Only use the not masked images 
training_images = images[mask] 

検証セットは、その後、すべてのマスクされた要素のようになります。numpyのアレイ上

validation_images = images[~mask] 

数学的な操作作業要素が賢明なので、各要素に対してmodulo%)を実行し、同じ形の別の配列を返します。 != 0も要素単位で動作し、モジュロがゼロでないかどうかを比較します。だから、マスクはを含む配列に過ぎず、その値はint * 6Trueではありません。

+0

np.arange(images.shape [0])は配列を返します。どうしてできますか(この%6)!= 0?あなたはそこで何をしていますか、それはなぜ機能しますか?あなたはそれを説明できますか? –

+0

そして、これはうまくいくようです! –

+0

最後に、操作のコンテキストを説明する小さなテキストを編集しました。 – MSeifert