【问题标题】:Saving 1D numpy arrays of different sizes to txt file columnwise将不同大小的 1D numpy 数组保存到文本文件列中
【发布时间】:2016-03-18 03:41:36
【问题描述】:

下面是图解代码

from pylab import *

 a = array([1,2,3])
 b = array([4,5])

我想要 test.out 有的是

1 4
2 5
3

以前,人们已经给出了将不同大小的一维numpy数组存储到txt文件的解决方案:Saving numpy array to txt file row wise

那么如何按列保存呢?

当然你可以使用 三个这样的数组

 a = array([1,4])
 b = array([2,5])
 c=array([3])

并按行保存它们 然而,当有很多一维数组时,这不是一个聪明的方法。

【问题讨论】:

  • 您可以将它们转换为字符串并使用熊猫。
  • 打开一个文件,逐行写出数字。使用普通的 Python 字符串格式来创建每一行。这基本上就是 np.savetxt 所做的。
  • 我以后会学习pandas。@Colonel savetxt 只保存相同大小的数组@hpaulj
  • 这就是为什么我建议自己写。我提到savetxt 是为了清楚地表明一个朴素的作家也一样好——如果它能解决你的问题,那就更好了。这只是一个普通的 Python 文件写入问题。
  • 不需要自己写……熊猫只是大大简化了生活;)

标签: python arrays numpy


【解决方案1】:

我在https://stackoverflow.com/a/34242952/901925 的回答可以适应这种情况

3个不同长度的数组;可以是列表

In [715]: heights=np.array([40,50])
In [716]: widths=np.array([60,65,70])
In [717]: yrs=np.array([1995,1996,1997,1998])

使用itertools.zip_longest 遍历它们,在缺少值的地方使用fillvalue

In [718]: for xyz in itertools.zip_longest(yrs,widths,heights,fillvalue=''):
    print('%-12s,%-12s,%-12s'%xyz)
   .....:     
1995        ,60          ,40          
1996        ,65          ,50          
1997        ,70          ,            
1998        ,            ,  

写入文件使用:

In [719]: with open('temp.txt','w') as f:
    for xyz in itertools.zip_longest(yrs,widths,heights,fillvalue=''):
        f.write('%-12s,%-12s,%-12s\n'%xyz)
   .....:         
In [720]: cat temp.txt
1995        ,60          ,40          
1996        ,65          ,50          
1997        ,70          ,            
1998        ,            ,  

(PY3 中的itertools.zip_longest,PY2 中的izip_longest)。

【讨论】:

    【解决方案2】:

    pandas 的简单方法:

    import pandas as pd
    
    d  = dict(a=a, b=b)
    df = pd.DataFrame.from_dict(d, orient='index').transpose().fillna('')
    
    #   a  b
    #0  1  4
    #1  2  5
    #2  3   
    

    并写在一个csv中(你不想写索引也不想写列):

    df.to_csv('file.csv', index=False, header=False)
    

    【讨论】:

    • 我现在正在学习如何安装pandas,貌似.whl 比numpy.exe 等难安装。
    • 你可以直接安装Anacondacontinuum.io/downloads,它是python,包括大部分需要的库(numpy、pandas等)
    • 我使用pypi成功安装了它,但是为什么我得到这个4 5是第一列? 1 2 3 秒? ...困惑
    • 不知怎的,列的顺序不固定为a和b...是不是pandas包安装不当?
    • 你的结果是什么?如果需要,您可以对列重新排序。
    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2019-10-22
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多