H

BTW,ndarrayって0<1の数値と0<nの数値だと、どっちが大きいの?

 ビッグデータとか扱っているとき、ふと思ったのですが、ndarrayにおいて0<1で表される値を持つ配列と0<nで表される値を持つ配列だと、どちらの方が多いのでしょうか。

 今回はsizeが100^2の配列で、n=300として検証します。

 

 検証コード

  1. import sys
  2. import numpy
  3. a = numpy.random.randint(0, 300, (100, 100))
  4. print(sys.getsizeof(a))
  5. a = a / 300 #ここで0<=1にする。
  6. print(sys.getsizeof(a))

 

 さて結果は

  40120
  80120

となりました。つまり小数点のほうがサイズが大きいことになります。

 

 追加検証をしてみましょう。例えばaの要素を一個取り出して見てみます。

 例えばa[0, 0]は0.2866666666666667というような値となっています。

 さて、これを見てもらえば分かる通り、循環小数になっています。

 従って、求める精度にもよりますが、ある程度の桁数で切り捨てても大丈夫なのではないでしょうか。

 なので、このようなコードを足してみることにしました。

a = numpy.round(a, 5)

  色が違うのは気にしないでください。

 そして、結果は......

     a[0,0]の値は0.19667となりました。

 それで、肝心のサイズですが、なんと変化ありませんでした。

 

 そういえば、このサイズは桁数に依存しないのでしょうか?

 a=numpy.round(a,2)としても、大きさは変わりませんでした。

 

 以上の結果より、float型よりint型の配列の方が容量が少ないのではないでしょうか。