在Numpy中连接3个或更多列表的简单方法

时间:2016-03-25 16:23:04

标签: python numpy concatenation simplify

目的是合并四个列表resulttrainAcccrossAcctestAcc,每列列表相同,并将生成的矩阵存储为CSV文件以及必要的标题。

以下是我的工作代码。

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,是否有更简单的方法来执行此任务?

2 个答案:

答案 0 :(得分:2)

要合并列表:

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)]

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