好的方法来制作一个没有numpy的多维数组
我需要一些方法来跟踪布尔标志的四维数组。只是真/假值。看起来numpy是做这种事情的标准方式,但安装起来似乎比我想要处理的要复杂得多。 (我需要在多个操作系统环境中工作)。好的方法来制作一个没有numpy的多维数组
那么,有没有一种简单的方法,或简单的模块,可以让我从四维数组存储和获取True/False值,而无需挖掘自己的意大利面条堆比海洋还深?
我可以做列表清单列表,但似乎相当笨拙。
如果数组是稀疏的(罕见的真值);你可以使用collections.defaultdict
:
from collections import defaultdict
a = defaultdict(bool)
a[i,j,k,m] = True
您可以使用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-19 14:24:07
你如何将数据加载到数组中? – Will 2013-02-19 14:25:58
窗口的安装程序仅适用于32位窗口。 只要我能预测,我只需要设置,取消设置并获取标志。 (所以numpy可能是严重的矫枉过正) – 2013-02-19 14:26:30
如何像
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维对象获取,或者用一个字典:
In [7]: x = {}
# store
In [8]: x[1,2,3,4] = True
# get
In [9]: x[1,2,3,4]
Out[9]: 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})
如果我有* *实现这一点我自己,我可能会围绕一个'bytearray'创建一个类包装 - 覆盖'__setitem__'和'__getitem__'指向正确位置。当然,如果你想支持切片等,这会变得更加复杂 - 最终,我认为我只是使用'numpy' ;-) – mgilson 2013-02-19 14:25:33
你需要什么操作?你可以用四元组键的字典逃脱吗? – DSM 2013-02-19 14:26:06
你知道,安装numpy并不难...... – wim 2013-02-19 14:31:29