快速转换np.arrays并将它们写入文件的方法

时间:2015-02-20 08:20:32

标签: python arrays numpy

我的情况是我将.TDMS文件写入.txt文件。 TDMS文件结构具有由numpy数组格式的通道组成的组。我试图找出循环群组和频道的最快方法,并将它们转换为" table"格式。我有一个有效的解决方案,但我认为这不是那么快。

我的代码片段,其中文件已打开到 tdms 变量,而 groups 变量是该.tdms文件中的组列表。代码循环遍历组,并将该组中的频道列表打开为频道变量。要从通道获取numpy.array数据,请使用channels [list index] .data。然后我只用column_stack将频道添加到" table"逐个格式化并使用np.savetxt保存数组。有没有更快的方法来做到这一点?

for i in range(len(groups)):
    output = filepath+"\\"+str(groups[i])+".txt" 
    channels = tdms.group_channels(groups[i]) #list of channels in i group
    data=channels[0].data #np.array for first index in channels list
    for i in range(1,len(channels)):
       data=np.column_stack((data,channels[i].data))       

    np.savetxt(output,data,delimiter="|",newline="\n")  

频道数据是1D阵列。长度= 6200

channels[0].data = array([ 12.74204722,  12.74205311,  12.74205884, ...,
    12.78374288,  12.7837487 ,  13.78375434])

1 个答案:

答案 0 :(得分:0)

我认为您可以使用以下内容简化column_stack应用程序:

np.column_stack([chl.data for chl in channels])

我不认为它会节省时间(很多)

这是您的数据吗?

In [138]: np.column_stack([[0,1,2],[10,11,12],[20,21,22]])
Out[138]: 
array([[ 0, 10, 20],
       [ 1, 11, 21],
       [ 2, 12, 22]])

savetxt遍历data行,执行格式并在每个行上书写。

由于输出的每一行都包含来自每个channels的数据点,我认为你必须像这样组装一个二维数组。而且你必须迭代channels来做(假设它们是不可向量化的对象)。

循环遍历data并执行自己的行写似乎没有任何好处。 savetxt是相对简单的Python代码。


使用1d数组,大小相同,这种结构更简单,基本np.array更快:

np.array([[0,1,2],[10,11,12],[20,21,22]]).T