我的情况是我将.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])
答案 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