【问题标题】:Simpler way to concatenate 3 or more lists in Numpy在 Numpy 中连接 3 个或更多列表的更简单方法
【发布时间】:2016-03-25 16:23:03
【问题描述】:

目的是合并四个列表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 来完成这项任务?

【问题讨论】:

  • 也许使用pandas 会有所帮助?
  • @DainDwarf:感谢您的建议。如果您发布一个工作示例,它会更有帮助。
  • 您似乎在寻找 Python 的 zip 函数?
  • @JacquesdeHooge:zip 函数?这是我第一次听说 Python 中有这样的功能。你能扩展一下吗?
  • 我已经编辑了我的答案,希望您使用writerow() 方法而不是连接不同性质的数组...

标签: python numpy concatenation simplify


【解决方案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

【讨论】:

  • 哇!简单而美观。这正是我要找的东西!
  • 太棒了!您已经解决了我在问题中提到的两个问题:合并列列表并为 CSV 存储添加列标题。
  • 您了解np.array((result, trainAcc, crossAcc, testAcc)) 的工作原理吗? The docs幸运的是对这个问题非常清楚。
  • 抱歉,当我从我的问题中倒退时,它并没有出现在我的脑海中,因此出现了不必要的复杂代码。
【解决方案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)]

【讨论】:

  • 确实是一种简洁的方法,而且您也不必使用 NumPy 进行操作。它也适用于csv.writer。太糟糕了,我只能接受一个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多