我需要一些方法來跟蹤布爾標誌的四維數組。只是真/假值。看起來numpy是做這種事情的標準方式,但安裝起來似乎比我想要處理的要複雜得多。 (我需要在多個操作系統環境中工作)。好的方法來製作一個沒有numpy的多維數組
那麼,有沒有一種簡單的方法,或簡單的模塊,可以讓我從四維數組存儲和獲取True/False值,而無需挖掘自己的意大利麪條堆比海洋還深?
我可以做列表清單列表,但似乎相當笨拙。
我需要一些方法來跟蹤布爾標誌的四維數組。只是真/假值。看起來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