【问题标题】:Python/numpy append arrays, transpose, and save as csvPython/numpy 追加数组、转置并保存为 csv
【发布时间】:2012-08-02 12:17:51
【问题描述】:

我在做什么:生成一系列长的一维数组。

我想做什么: 追加/连接/vstack/?将它们保存到二维数组中,然后将行保存为 csv 文件中的列。

以下工作,但并不优雅:

rlist=[]                        # create empty list
for i in range(nnn)             # nnn is typically 2000
    (calculate an array "r")
    rlist.append(r)             # append f.p. array to rlist
rarr = array(rlist)             # turn it back into array so I can transpose
numpy.savetxt('test.csv',rarr.T,delimiter=',')  # save rows as columns in csv file

有没有更优雅或蟒蛇式的方式来做到这一点?

【问题讨论】:

  • 为什么说这不优雅?当然,您可以使用numpy.vstack 和转置——但最终,它将是相同数量的代码行,并且您将在循环的每次迭代中增长相同的数组(很可能是效率低下)或等到最后将它们堆叠在一起(这就是您现在正在做的事情)。我看不出有什么不同...

标签: python arrays list numpy transpose


【解决方案1】:

如果你事先知道rnnn的长度,你可以这样做:

rarr = np.zeros((r_len, nnn)) # r_len rows, nnn columns
for i in range(nnn):
    rarr[:,i] = r_calc()
numpy.savetxt('test.csv', rarr, delimiter=',')

这会将数据向量直接放入rarr 的行中,从而节省您转换为数组和转置的时间。

【讨论】:

  • 预分配数组是一个好方法。我不确定它是否更优雅,但它可能会更快一些。
【解决方案2】:
rarr = np.concatenate([get_array(r) for r in xrange(nnn)])
np.savetxt('test.cvs', rarr.T, delimiter=',')

【讨论】:

  • 感谢您的建议。我是一个真正的 Python 新手,所以我希望我的代码很难看。也许没有我想象的那么糟糕!我会通过这些想法工作。学习 Python 的绝佳方式,但(来自 FORTRAN)Python 的方法并不总是显而易见的。
猜你喜欢
  • 2016-08-31
  • 2015-08-03
  • 2018-01-14
  • 2015-02-21
  • 2021-10-05
  • 2018-09-28
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多