4

我需要一些方法来跟踪布尔标志的四维数组。只是真/假值。似乎 numpy 是执行此类操作的规范方式,但安装起来似乎比我真正想要处理的要复杂得多。(我需要在多个操作系统环境中工作。)

那么,有没有一种简单的方法或简单的模块,可以让我从一个四维数组中存储和获取真/假值,而不用给自己挖一堆比海洋更深的意大利面?

我可以做一个列表列表列表的列表,但这似乎相当笨拙。

4

5 回答 5

3

如果您只想存储和获取 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
于 2013-02-19T14:25:51.593 回答
3

如果数组是稀疏的(罕见的 True 值);你可以使用collections.defaultdict

from collections import defaultdict

a = defaultdict(bool)
a[i,j,k,m] = True
于 2013-02-19T14:26:01.370 回答
1

您可以只使用 python 列表代替 numpy 数组来生成多维数组。

就像是:

values = [[[[True, False, False], [False, False, False], ...]]]

您会使用 numpy 数组的其他哪些功能?如果您需要很多,它应该很容易在大多数平台上安装。大多数 Linux 发行版在他们的包管理方案中都有它,有一个用于 Windows 的“下一个,下一个,下一个,安装”安装程序,您可以使用 PIP 或类似的方式在 OS X 上安装。

正如其他人所建议的那样,一种替代方法是使用dict, 或者可能defaultdict并使用元组对其进行索引:

values = {}

values[1, 2, 3, 4] = True
...
于 2013-02-19T14:23:17.957 回答
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]转置输出形状。当然,这只会让你得到“空”数组。

于 2013-02-19T14:25:25.853 回答
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})
于 2013-02-19T14:52:39.670 回答