当我尝试从QString数组创建时,创建numpy数组失败

时间:2016-04-29 07:06:30

标签: python numpy pyqt4

如果数组的大小为2x2或更大,那么一切都很好,但如果行的维度为1,例如1x2,那么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)

1 个答案:

答案 0 :(得分: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