2016-04-29 42 views
3

如果數組的大小爲2 x 2或更大,那麼一切都很好,但如果行的維數爲1,例如1x2,numpy會執行某些操作沒想到。當我嘗試從一個QString數組創建時,創建一個numpy數組失敗了。

我該如何解決這個問題?

# TEST 1 OK 
myarray = np.array([[QString('hello'), QString('world')], 
        [QString('hello'), QString('moon')]], 
        dtype=object) 
print myarray 
print myarray.shape 
#[[PyQt4.QtCore.QString(u'hello') PyQt4.QtCore.QString(u'world')] 
# [PyQt4.QtCore.QString(u'hello') PyQt4.QtCore.QString(u'moon')]] 
#(2, 2) 


# TEST 2 OK 
myarray = np.array([['hello'], ['world']], dtype=object) 
print myarray 
print myarray.shape 
#[['hello'] 
# ['world']] 
#(2, 1) 


# TEST 3 FAIL 
myarray = np.array([[QString('hello'), QString('world')]], dtype=object) 
print myarray 
print myarray.shape 
#[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[PyQt4.QtCore.QString(u'h')]]]]]]]]]]]]]]]]]]]]]]]]]]]]] 
#.. 
#[[[[[[[[[[[[[[[[[[[[[[[[[[[[[PyQt4.QtCore.QString(u'e')]]]]]]]]]]]]]]]]]]]]]]]]]]]]] 
# etc... 
#(1, 2, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) 
+0

哦奇怪...似乎像numpy的是處理字符串數組或東西...如果你把會發生什麼2個方括號之間的逗號? – karina

回答

2

嘗試不同長度的字符串:

np.array([[QString('hello'), QString('moon')]], dtype=object)`. 

或創建和填充的方法,使一個對象數組

A = np.empty((1,2), dtype=object) 
A[:] = [QString('hello'), QString('moon')] 

我不熟悉這些對象,但在其他情況下我們試圖從列表中構建對象數組,但如果列表長度相同,則很棘手。如果QString可迭代,則.__len__可能會發生類似的情況。

我猜你的第一個例子工作,因爲QString比其他人短,不是因爲它是2x2。

這最近的有關使從自定義詞典類的對象數組可能是相關的問題:Override a dict with numpy support

+0

這是真的,我試過第一個例子,如果長度是相同的,失敗!很好的鏈接,也許是與http://stackoverflow.com/a/36666424/2270217有關的問題的原因,但我認爲你的解決方案對我來說已經足夠了謝謝! –

相關問題