我需要一些方法来跟踪布尔标志的四维数组。只是真/假值。似乎numpy是执行此类操作的规范方式,但安装似乎比我真正想要处理的更复杂。 (我需要在多个操作系统环境中工作。)
那么,是否有一种简单的方法,或简单的模块,可以让我存储并从四维数组中获取真/假值,而不会挖掘自己比海洋深的一堆意大利面?
我可以列出列表列表,但这看起来很笨拙。
答案 0 :(得分:3)
如果数组是稀疏的(罕见的真值);你可以使用collections.defaultdict
:
from collections import defaultdict
a = defaultdict(bool)
a[i,j,k,m] = True
答案 1 :(得分:1)
你可以使用python列表代替numpy数组来生成一个多维数组。
类似的东西:
values = [[[[True, False, False], [False, False, False], ...]]]
你会使用numpy数组的其他什么功能?如果您需要很多,在大多数平台上安装应该很简单。大多数Linux发行版在它们的软件包管理方案中都有它,有一个用于Windows的“next,next,next,install”安装程序,你可以使用PIP或类似软件在OS X上安装。
正如其他人所建议的那样,另一种方法是使用dict
或可能defaultdict
并使用元组对其进行索引:
values = {}
values[1, 2, 3, 4] = True
...
答案 2 :(得分:1)
如果你想要的只是存储和获取一个4维物体,也许可以使用一个词典:
In [7]: x = {}
# store
In [8]: x[1,2,3,4] = True
# get
In [9]: x[1,2,3,4]
Out[9]: True
答案 3 :(得分:0)
像
这样的东西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]
转置输出形状。当然,这只会让你获得“空”阵列。
答案 4 :(得分:0)
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})