numpyで型を指定して多次元配列を作る
多次元bool配列の用意方法。
忘れそうなのでメモ。
arraytest1.py
import numpy as np
array = np.zeros((2,2,2), dtype="bool")
これでいけるっぽい。デフォルトはfloat64だった。
numpyで型を指定してN次元配列を作る
N次元bool配列の用意方法。
arraytest2.py
import numpy as np
n = 9
array = np.zeros((2), dtype="bool")
arrayTmp = np.zeros((2), dtype="bool")
for i in range(n-1):
array = np.tensordot(array,arrayTmp,0)
print(array.shape) # (2, 2, 2, 2, 2, 2, 2, 2, 2)
以下を読むと、tensordotの第3引数を0にするとテンソルの直積を求めてくれるとのことなので、
直積を繰り返しとっていく。
https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.tensordot.html
なんかむずいな...。
もっと楽な方法はないものか。
何次元まで作れるか
25次元くらいは作れた。
ただ上記の方法では直積の計算が行われるので、生成に時間がかかってしまう。
よって、これ以上は諦め。
余談だが、昔FORTRAN90で行列計算していたときは7次元が限度だった。
Cだとメモリの限界まで行けるのかな。
メモリサイズを確認
sysモジュールのgetsizeof関数で確認できるらしい。
出力はバイト単位。
arraytest3.py
import numpy as np
import sys
arrayBool1 = np.zeros((10,10,10), dtype="bool")
print(sys.getsizeof(arrayBool1)) # 1128
arrayBool2 = np.zeros((4,5,5,10), dtype="bool")
print(sys.getsizeof(arrayBool2)) # 1144
要素数が同じでも次元が増えると、メモリ使用量は増えるっぽい。
きっと配列の内部で持っているアドレス番地分が増えているんだろう。
終わり。