ブール値フラグの 4 次元配列を追跡する方法が必要です。真/偽の値のみ。numpy はそのようなことを行う標準的な方法のようですが、実際に対処したいよりもインストールが複雑に思えます。(複数の OS 環境で作業する必要があります。)
では、海よりも深くスパゲッティの山を掘ることなく、4 次元配列から True/False 値を保存および取得できる簡単な方法または単純なモジュールはありますか?
リストのリストのリストのリストを作成することもできますが、それはかなり不器用に思えます。
4 次元オブジェクトを格納して取得することだけが必要な場合は、おそらく dict を使用します。
In [7]: x = {}
# store
In [8]: x[1,2,3,4] = True
# get
In [9]: x[1,2,3,4]
Out[9]: True
配列がまばらな場合 (まれな True 値); あなたが使用することができますcollections.defaultdict
:
from collections import defaultdict
a = defaultdict(bool)
a[i,j,k,m] = True
numpy 配列の代わりに python リストを使用して、多次元配列を生成できます。
何かのようなもの:
values = [[[[True, False, False], [False, False, False], ...]]]
numpy 配列の他のどの機能を使用しますか? かなりの数が必要な場合は、ほとんどのプラットフォームに簡単にインストールできます。ほとんどの Linux ディストリビューションには、パッケージ管理スキームのどこかにそれがあり、Windows 用の「次、次、次、インストール」インストーラーがあり、PIP などを使用して OS X にインストールできます。
他の人が示唆しているように、代わりにdict
、またはおそらくdefaultdict
タプルを使用してインデックスを作成することです。
values = {}
values[1, 2, 3, 4] = True
...
from collections import defaultdict
def make(depth):
return defaultdict(lambda: make(depth - 1)) if depth > 1 else False
>>> d = defaultdict(lambda: make(4))
>>> d[1][2][3][4] = True
>>> d[1][2][3][4]
True
>>> d[1][2][3][2]
False
>>> d[1][2][3]
defaultdict(<function <lambda> at 0x10d08d488>, {2: False, 4: True})
のようなものはどうですか
def make_array(shape):
data = False
while len(shape) > 0:
data = [data for x in range(shape[-1])]
shape.pop()
return data
>>> make_array([3,4,5])
[[[False, False, False, False, False], [False, False, False, False, False], [False, False, False, False
, False], [False, False, False, False, False]], [[False, False, False, False, False], [False, False, Fa
lse, False, False], [False, False, False, False, False], [False, False, False, False, False]], [[False,
False, False, False, False], [False, False, False, False, False], [False, False, False, False, False],
[False, False, False, False, False]]]
>>>
shape[0]
出力形状を転置することができます。もちろん、これは「空の」配列を取得するだけです。