1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

numpyで型を指定してN次元配列を作る

Last updated at Posted at 2018-11-14

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

要素数が同じでも次元が増えると、メモリ使用量は増えるっぽい。
きっと配列の内部で持っているアドレス番地分が増えているんだろう。

終わり。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?