我的意见:
??AAAAT 66.5939
??AAAAW 63.3312
??AAAAZ 63.3312
??AAAĄB 58.0579
??AAAĄD 81.3312
??AAAĄF 87.3312
??AAAĄG 64.5562
??AAAĄH 63.3687
??AAAĄK 81.3312
??AAAĄL 81.3312
??AAAĄM 81.3312
??AAAĄN 79.3312
我有一个脚本,它取第二列的平均值,从原始值中减去它并将修改后的列保存到另一个文件中:
import numpy as np
def calculateAverage():
'''real values of leaves should be averaged over all possible leaves'''
values = np.loadtxt("input/leaves.txt", usecols=(1,))
leaves = np.loadtxt("input/leaves.txt", dtype='str', usecols=(0,))
values -= np.mean(values)
outputFile = open("output/leaves.txt", 'w')
for i, elem in enumerate(leaves):
outputFile.write('%s %f\n' % (leaves[i], values[i]))
outputFile.close()
现在,我正在尝试使用记录数组:
import numpy as np
def calculateAverage1():
'''real values of leaves should be averaged over all possible leaves'''
values = np.loadtxt("input/leaves.txt", dtype=[('key', 'S8'), ('val', 'f8')])
values['val'] -= np.mean(values['val'])
np.savetxt("output/leaves.txt", values, fmt='%s %f')
当我用emacs或其他编辑器打开它时,第一个脚本的输出看起来就像输入。第二个脚本的输出默认为utf-8解码字符:
??AAAAT -11.730239
??AAAAW -14.992939
??AAAAZ -14.992939
??AAA\304\204B -20.266239
??AAA\304\204D 3.007061
??AAA\304\204F 9.007061
??AAA\304\204G -13.767939
??AAA\304\204H -14.955439
??AAA\304\204K 3.007061
??AAA\304\204L 3.007061
??AAA\304\204M 3.007061
??AAA\304\204N 1.007061
我必须在编辑器中专门选择utf-8才能正确显示(即编码)。
如何强制numpy保存文件以使其编码为utf-8?这是numpy的问题还是特定于操作系统?我在Ubuntu 14.04,python 2.7.6,numpy 1.8.1。
答案 0 :(得分:1)
这不是一个快速而肮脏的解决方案,但它适用于我(更简单)的情况。而不是直接保存到utf-8,你可以保存到一个临时文件,然后进行第二次传递,从任何编码numpy默认转换为(在我的Ubuntu 14.04,python 3.4.0,numpy 1.9.2 case iso- 8859-1)到utf-8。
np.savetxt('foo', data, **kwargs)
with open('foo', 'r', encoding='iso-8859-1') as fin, open('bar', 'w', encoding='utf-8') as fout:
for line in fin:
fout.write(line)
你可以通过运行
找出numpy写的格式 $ file -i foo
在命令行。