将python列表转换为numpy时出错

时间:2015-04-13 08:00:16

标签: python numpy

以下代码:

class1 = genfromtxt('example.csv',, delimiter=',')
#rest of the classes are loaded in the same way  



timejoin = []
classlist = []
class_list=[class1,class2,class3,class4,class5,class6,class7]

print class1.shape

print len(timejoin)

classcounter = 0
for class_i in class_list:
    classcounter = classcounter + 1
    odd = class_i[1::2]
    even = class_i[1::2]
    oddandeven = np.concatenate((odd, even), axis=1)
    print oddandeven.shape
    timejoin.append(oddandeven)
    countervector = np.full((oddandeven.shape[0],1), classcounter)
    print countervector.shape
    classlist.append(countervector)
    break


print len(timejoin)


timejoin1 = np.array(timejoin)
classlist1 = np.array(classlist)
print timejoin1.shape
print classlist1.shape

具有以下打印输出:

(52L, 350L)
0
(26L, 700L)
(26L, 1L)
1
(1L, 26L, 700L)
(1L, 26L, 1L)

当删除中断时,打印产生:

(52L, 350L)
0
(26L, 700L)
(26L, 1L)
(22L, 700L)
(22L, 1L)
(15L, 700L)
(15L, 1L)
(25L, 700L)
(25L, 1L)
(21L, 700L)
(21L, 1L)
(27L, 700L)
(27L, 1L)
(26L, 700L)
(26L, 1L)
7
(7L,)
(7L,)

最后两个元素是numpy转换的列表。 有人知道发生了什么吗?我没有在每个列表中获得正确的元素来进行numpy转换。该列表假设包含所有类元素。

1 个答案:

答案 0 :(得分:1)

对于您构建的每个class_i

print oddandeven.shape
timejoin.append(oddandeven)

和相应的印刷品(如果我已正确推断出事物)

(26L, 700L)
(22L, 700L)
...

换句话说,timejoin是7个数组的列表,每个数组都有不同的维度。 np.array(timejoin)将是一个dtype=object的数组,其中每个元素都是其中一个数组。

如果数组具有匹配的维度,则它将构造为类似(7,22,700)的形状。但在这种情况下,这是不可能的。

您是否看过timejoin1本身,而不仅仅是它的形状?这应该给你一个线索。

您还需要清理打印件。在线上放一些标签。我们应该能够阅读您的代码和输出,并轻松查看正在发生的事情。

如果列表中的所有数组具有相同的列数,则np.vstack将连接行。

In [156]: class1=np.empty((26,700))

In [157]: class2=np.empty((22,700))

In [158]: class3=np.empty((10,700))

In [159]: np.vstack([class1,class2,class3]).shape
Out[159]: (58, 700)
# or np.concatenate([class1,class2,class3],axis=0)