BTW,ndarrayって0<1の数値と0<nの数値だと、どっちが大きいの?
ビッグデータとか扱っているとき、ふと思ったのですが、ndarrayにおいて0<1で表される値を持つ配列と0<nで表される値を持つ配列だと、どちらの方が多いのでしょうか。
今回はsizeが100^2の配列で、n=300として検証します。
検証コード
- import sys
- import numpy
- a = numpy.random.randint(0, 300, (100, 100))
- print(sys.getsizeof(a))
- a = a / 300 #ここで0<=1にする。
- 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型の配列の方が容量が少ないのではないでしょうか。