2016-04-29 158 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有关的问题的原因,但我认为你的解决方案对我来说已经足够了谢谢! –