2017-10-26 12 views
-1

私は How to merge two large numpy arrays if slicing doesn't resolve memory error?numpy intを別のnumpy配列でfloatに変換するにはどうすればよいですか?

スライスがnumpy.multiplyのための作業ですが、で浮くようにnumpyのint型に変換する方法と思わないし、次のようにそれを処理するためにスライスを使用しようとすると、numpyのメモリエラーの問題の膨大なデータを持っている スライシング。続き はサンプルです:

images = numpy.array([1,2,3,4,5,6,7,8,9,10]) 
images[0:5] = images[0:5].astype(numpy.float32) 
print type(images[0]) 
images = images.astype(numpy.float32) 
print type(images[0]) 

<type 'numpy.int32'> 
<type 'numpy.float32'> 

私はimages.astype(numpy.float32)を使用すると、私は(DTYPEが同じである)メモリエラーを得ました。 ターゲットメモリが小さすぎます。疎な行列を使用するのは難しいかもしれません。

ご意見ありがとうございました...!

+0

numpyは、 'numpy.array'のすべての要素が同じ型であるため、配列の一部の型だけを変更することはできません。あなたは別の配列 'images_5_float = images [0:5] .astype(numpy.float32)' –

+0

を作成することができます...それを得ました...私はすでに..別の方法を見つけることを願っています。 – Arlen

+0

しかし、スライスごとに次の操作をパートごとに実行できる場合は、この新しい部分配列を使用できます –

答えて

0

スライスのdtypeは変更できません。あなたは

images[0:5] = images[0:5].astype(numpy.float32) 

images[0:5].astype(numpy.float32)を行うと、あなたのスライスのfloatコピーが作成されますが、imagesdtypeintであるためimagesスライスに割り当てられたときに結果がintに変換されます。そして、あなたが必要となるものは何でも保存し、

copied_slice = images[0:5].astype(numpy.float32) 

は、あなたのデータのこの小さな部分に必要なすべての計算を行います。あなたは何ができるか

はあなたのスライスの一時的なコピーを作成し、フロートに変換されます次の(コピーして変換した)スライスに移動します。

関連する問題