制作没有numpy的多维数组的好方法

时间:2013-02-19 14:20:45

标签: python arrays

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

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

我可以列出列表列表,但这看起来很笨拙。

5 个答案:

答案 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})