1

temp.txt 文件示例:

文件:t091110_065921.SFTC的Src:J1903 + 0925 N衬底:1的Nch:1 Npol:4 Nbin:1024个RMS:0.00118753
0 0 0 0.00148099 -0.00143755 0.000931365 -0.00296775
0 0 1 0.000647476 -0.000896698 0.000171287 0.00218597
0 0 2 0.000704697 -0.00052846 -0.000603842 -0.000868739

.
ETC..

谢谢!


为了响应这是如何生成的,我使用了以下代码:

for i in range(numrows):
    epoch_name = y['filename'][i]
    os.system('pdv -t {0} > temp.txt '.format(epoch_name))
    stokes_line = np.genfromtxt('temp.txt', usecols=3, dtype=[('stokesI','float')], skip_header=1)
    stokes_list.append(stokes_line)
stokes_columns = zip(*stokes_list)

所以我使用其他一些软件和“pdv”命令在每次程序循环时生成一个值网格(进入一个文本文件)。然后我从这个文本文件中拉出 1 个特定的列并将其添加到“stokes_list”。最后我转置数组(或任何它),使列变成行。


我在 Python 中有一个列表列表(或任何数组,我真的不懂术语),看起来像:

[((1,)(2,)(3,)),((4,)(5,)(6,)),((7,)(8,)(9,))]

首先,我不确定为什么它在方括号内有括号,而不是方括号内的方括号。其次,我不知道为什么数字后面有一个逗号,而它们自己出现在括号中。无论如何-也许需要更多的上下文来回答这个问题。但我真正的问题是,我正在尝试将其写入以下格式的文件:

1   2   3  
4   5   6  
7   8   9  

我在尝试:

with open('final.txt','w') as f:
    for row in stokes_columns:
        f.write('\t'.join(row)+'\n')

其中“stokes_columns”是我的数组/列表顶部的名称。

我收到错误消息:

f.write('\t'.join(row)+'\n')
TypeError: sequence item 0: expected string, numpy.void found

有人可以帮我吗?

4

5 回答 5

2

join需要一个字符串数组。你的第三行应该是:

f.write('\t'.join(str(cell) for cell in row)+'\n')

如果需要,您可以在一个语句中完成整个操作:

f.write('\n'.join(
    '\t'.join(str(cell) for cell in row)
    for row in stokes_columns
))
于 2012-09-06T06:47:03.267 回答
2

这不是创建或转置 numpy 矩阵的方法(特别是因为它不是 numpy 矩阵 - 它是 numpy 向量的常规列表)。尝试以下操作:

stokes_list = np.array([])
for i in range(numrows):
    epoch_name = y['filename'][i]
    os.system('pdv -t {0} > temp.txt '.format(epoch_name))
    stokes_line = np.genfromtxt('temp.txt', usecols=3, dtype=[('stokesI','float')], skip_header=1)
    stokes_list = vstack(stokes_list, stokes_line)

stokes_columns = np.transpose(stokes_list)
于 2012-09-06T07:03:52.157 回答
2

而不是您指定的列表(我认为这不是应该的)

假设它是[((1,),(2,),(3,)),((4,),(5,),(6,)),((7,),(8,),(9,))]

以下应该在一定程度上帮助你

获得最终输出后,您可以使用它将其推送到行

In [74]: str = [((1,),(2,),(3,)),((4,),(5,),(6,)),((7,),(8,),(9,))]

In [75]: str2 = []

In [76]: for elem in str:
   ....:     str2.append([data[0] for data in elem])
   ....:

In [77]: str2
Out[77]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [78]: for elem in zip(*str2):
   ....:     print elem
   ....:
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)

根据 OP 的最后一次编辑,更改了输出:

In [92]: for elem in str2:
   ....:     print elem
   ....:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
于 2012-09-06T07:04:50.787 回答
2

您不是在尝试编写一个元组列表,而是一个具有灵活数据类型的 numpy 数组(void在这种情况下,根据您的TypeError)。灵活的 dtype 没有预定义的大小,因此在保存它之前,您应该决定要使用哪种 dtype 来存储数组。例如,假设您要将数据存储为 int16,您可以执行以下操作:

your_array.astype('int16').tofile(filename)

我认为它应该工作。

于 2012-09-06T07:12:23.137 回答
0

tofile() 函数将所有项目(作为机器值)写入文件对象 f。也许savetxt()是 am ascii-file 的正确功能

于 2012-11-24T20:52:10.840 回答