我想有一個像這樣的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是
我想有一個像這樣的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是
你想要一個更高維的數組,比如說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列表的一個輕微泛化。
你的第一個建議,我認爲會奏效。 Doea重要的是,我的第一列只是一個整數,而我的第二列是一個對象? – BadProgrammer
看到我的補充。 – hpaulj
你想要的對象創建一個形狀爲(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型品牌的陣列從構建陣列到切片和重塑更容易的許多操作。
我想你誤解了我的問題。我不是在尋找一個整數矩陣。我需要一個看起來像[int,[[int,int]]]的矩陣。第一列是int的矩陣,第二列是整數列表的列表 – BadProgrammer
刷新頁面。我在回答的第二部分提到了這一點。 – unutbu
這更接近我所期待的。不過,我希望第二欄支持一個列表。目前它只支持1分。 – BadProgrammer
看看這裏的文檔:http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html。如果你想指定形狀(1,2),你需要按順序傳遞它,就像@unutbu在他的答案中所說的那樣。否則,它將假定'2'是可選的數據類型。 –