2016-07-29 18 views
1

我有一個空列表陣列宣佈,因爲這樣的:如何強制NumPy追加列表作爲對象?

r = np.array([])

而且我有一個在每個循環增加值的數組r的操作。假設第一個循環添加[1,2,3],下一個添加[4,5,6,7]。我如何追加到數組r,同時強制將參數append添加爲對象而不是元素方式?

含義,我想這一點,完成後:

r = np.array([[1, 2, 3], [4, 5, 6, 7]])

,我相信它會被要求dtype = object。或者至少這是我想我想要的。

如果我使用

r = np.append(r, [1,2,3]) 
r = np.append(r, [4,5,6,7]) 

我得到

r = np.array([1., 2., 3., 4., 5., 6., 7.])

唯一的問題是,我需要在一個特定的方式在以後使用此。我需要能夠單獨訪問子列表並對它們進行操作,但是我以後也需要能夠訪問整個數組。通常我會做np.ravel來得到這個,但是當子數組的長度不一致(他們不會)時,我不能這麼做。

+0

「我有一個空的列表中聲明,因爲這樣的:'R = np.array([])'」 - 這是一個數組。它在那裏說「陣列」。瞭解列表和數組之間的差異非常重要,因爲它們的設計完全不同,使用錯誤的可能會破壞您的性能或導致像現在這樣的錯誤。 – user2357112

+0

@ user2357112對不起,我的意思是數組。顯然,我並沒有將列表和數組混淆,因爲使用普通的python列表這個任務非常簡單。 – Anonymous

+2

你*應該使用一個普通的Python列表。通過這種方式做事,你沒有獲得NumPy的所有優點和缺點。對數組追加數據的速度非常慢,特別是如果你一遍又一遍地做。 – user2357112

回答

2

創建陣列時,您可以使用列表理解:

>>> np.array([row for row in [1, 2, 3], [4, 5, 6, 6]]) 
array([[1, 2, 3], [4, 5, 6, 6]], dtype=object) 
+0

這會工作,但它不是很優雅,我寧願一個純粹的答案。此外,我必須一次添加一個子陣列,動態地 – Anonymous

+0

@jphollowed Numpy不是用來做這種操作的。它不會比普通列表更有效率。只需使用普通的python列表。你的最終目標是什麼?爲什麼你需要一個列表對象數組? – Praveen

+2

'append'在'numpy'操作中不是一個優雅的。這是一種自然的「列表」操作,但是一種人爲設計的'numpy'操作。建立你的動態列表,並在最後轉換爲數組,如果有的話。 – hpaulj