2015-04-18 52 views
0

我想有一個像這樣的numpy矩陣 [int,[[int,int]]] 我收到一個如下所示的錯誤:「ValueError:setting an包含序列的數組元素「。Python聲明列表的列表的一個numpy矩陣

下面

是聲明

def __init__(self): 
    self.path=np.zeros((1, 2)) 

我試圖在該行的值賦給這個下面

routes_traveled.path[0, 1]=[loc] 

祿是列表,routes_traveled是

+0

看看這裏的文檔:http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html。如果你想指定形狀(1,2),你需要按順序傳遞它,就像@unutbu在他的答案中所說的那樣。否則,它將假定'2'是可選的數據類型。 –

回答

0

你想要一個更高維的數組,比如說3d,還是你真的想要一個2d數組,其元素是Python lists。真正的列表,而不是數組numpy?放列表中的陣列

的一種方法是使用dtype=object:此數組的

In [71]: routes=np.zeros((1,2),dtype=object) 
In [72]: routes[0,1]=[1,2,3] 
In [73]: routes[0,0]=[4,5] 

In [74]: routes 
Out[74]: array([[[4, 5], [1, 2, 3]]], dtype=object) 

一個術語是2元素列表,另一個是3元素列表。

我可以直接創建同樣的事情:

In [76]: np.array([[[4,5],[1,2,3]]]) 
Out[76]: array([[[4, 5], [1, 2, 3]]], dtype=object) 

但是如果我給它的長度相同的2個名單,我會得到一個三維數組:

In [77]: routes1=np.array([[[4,5,6],[1,2,3]]]) 
Out[77]: 
array([[[4, 5, 6], 
     [1, 2, 3]]]) 

我可以索引最後的routes1[0,1],並獲得數組:array([1, 2, 3]),其中routes[0,1]給出[1, 2, 3]

在這種情況下,你需要清楚你在談論數組,子數組和Python列表的位置。


隨着dtype=object,這些元素可以是任何東西 - 列表,字典,數字,字符串

In [84]: routes[0,0]=3 
In [85]: routes 
Out[85]: array([[3, [1, 2, 3]]], dtype=object) 

只是要潔具,這樣一種陣列失去了很多,一個純粹的數字陣列具有的功能。數組實際包含的是指向Python對象的指針 - 僅僅是Python列表的一個輕微泛化。

+0

你的第一個建議,我認爲會奏效。 Doea重要的是,我的第一列只是一個整數,而我的第二列是一個對象? – BadProgrammer

+0

看到我的補充。 – hpaulj

1

你想要的對象創建一個形狀爲(1, 2)的零的數組?在這種情況下,請使用np.zeros((1, 2))

In [118]: np.zeros((1, 2)) 
Out[118]: array([[ 0., 0.]]) 

與此相反,提出了np.zeros(1, 2)TypeError

In [117]: np.zeros(1, 2) 
TypeError: data type not understood 

the second argument to np.zeros因爲被認爲是在dtype,和2不是值dtype


或者,要創建一個由int和一對整數的自定義D型一維數組,你可以使用

In [120]: np.zeros((2,), dtype=[('x', 'i4'), ('y', '2i4')]) 
Out[120]: 
array([(0, [0, 0]), (0, [0, 0])], 
     dtype=[('x', '<i4'), ('y', '<i4', (2,))]) 

我不會推薦這雖然。如果值都是整數,我認爲你會用一個簡單的ndarray與同質整數D型更好,也許形狀(NROWS,3):

In [121]: np.zeros((2, 3), dtype='<i4') 
Out[121]: 
array([[0, 0, 0], 
     [0, 0, 0]], dtype=int32) 

一般來說,我發現使用一個簡單的D型品牌的陣列從構建陣列到切片和重塑更容易的許多操作。

+0

我想你誤解了我的問題。我不是在尋找一個整數矩陣。我需要一個看起來像[int,[[int,int]]]的矩陣。第一列是int的矩陣,第二列是整數列表的列表 – BadProgrammer

+0

刷新頁面。我在回答的第二部分提到了這一點。 – unutbu

+0

這更接近我所期待的。不過,我希望第二欄支持一個列表。目前它只支持1分。 – BadProgrammer