2016-03-25 22 views
0

目的是明智合并四个列表resulttrainAcccrossAcctestAcc,每个具有相同的长度列并存储所得到的矩阵作为CSV必要标题沿文件。更简单的方法来连接3名或多个列表中numpy的

以下是我的工作代码来做到这一点。

acc = np.concatenate((np.array(result,ndmin=2).T, 
        np.array(trainAcc, ndmin=2).T, 
        np.array(crossAcc, ndmin=2).T, 
        np.array(testAcc, ndmin=2).T), axis=1) 
acc = np.concatenate((np.array(["Classifier","Train Accuracy", "CV Accuracy", "Test Accuracy"], ndmin=2), acc), axis=0) 

with open("bestClassifier.csv", 'wb') as f: 
    csv.writer(f).writerows(acc) 

正如您所看到的,代码对于一项任务来说并不那么美观如此简单。所有列表必须转换为二维数组并进行转置以便按列合并。

有没有更简单的方法来执行此任务有或没有NumPy?

+0

也许使用'pandas'将有帮助呢? – DainDwarf

+0

@DainDwarf:感谢您的建议。如果你发布一个实际的例子,它会有更多的帮助。 –

+0

似乎你正在寻找Python的zip功能? –

回答

1

为什么不

acc = np.array((result, trainAcc, crossAcc, testAcc)).T 

测试它

In [14]: np.array(([1,2,3,4,5],[10,20,30,40,50])).T 
Out[14]: 
array([[ 1, 10], 
     [ 2, 20], 
     [ 3, 30], 
     [ 4, 40], 
     [ 5, 50]]) 

怎么样的输出?

In [25]: acc = np.array(([1,2,3,4,5],[10,20,30,40,50])).T 

In [26]: with open('pip.csv','w') as f: 
    ....:  writer = csv.writer(f) 
    ....:  writer.writerow(['Units', 'Tens']) 
    ....:  writer.writerows(acc) 

In [27]: !cat pip.csv 
Units,Tens 
1,10 
2,20 
3,30 
4,40 
5,50 
+0

哇!简单而美观。这只是我一直在寻找的东西! –

+0

太棒了!你已经解决了我在问题中提到的两个问题:合并列列表并为CSV存储添加列标题。 –

+0

你知道'np.array((result,trainAcc,crossAcc,testAcc))是如何工作的吗? [文档](http://docs.scipy.org/doc/numpy/user/basics.creation.html#arrays-creation)幸运的是在这个问题上非常明确。 – gboffi

1

要合并列表:

a = [1, 2, 3, 4] 
b = [10, 20, 30, 40] 
c = [100, 200, 300, 400] 

zipped = zip (a, b, c) 

print (zipped) 

# [(1, 10, 100), (2, 20, 200), (3, 30, 300), (4, 40 400)] 
+0

确实是一种简洁的方法,而且您也不必使用NumPy进行操作。它也适用于'csv.writer'。太糟糕了,我只能接受一个答案。 –

相关问题