我正在尝试将numpy矩阵导出为ASCII格式,但我想首先添加一个标题。
我的代码概念是:
我尝试了以下内容:
尝试1:
import numpy as np
A = np.genfromtxt('......Input\chm_plot_1.txt', dtype=None, delimiter='\t')
header = A[0:6]
B = A[6:]
mat_out = np.concatenate([A,B])
np.savetxt('........out.txt', mat_out, delimiter='\t')
,但是给出错误:
TypeError:数组dtype(' | S3973')与格式不匹配 说明符('%。18e')
尝试2:
import numpy as np
A = np.genfromtxt('......Input\chm_plot_1.txt', dtype=None, delimiter='\t')
header = A[0:6]
headers = np.vstack(header)
head_list = headers.tolist()
head_str = ''.join(str(v) for v in head_list)
B = A[6:]
np.savetxt('\out.txt', B, header = head_str, delimiter='\t')
,它给出了同样的错误:
TypeError:数组dtype(' | S3973')与格式不匹配 说明符('%。18e')
尝试3:
import numpy as np
import linecache
A = np.genfromtxt('.............\Input\chm_plot_1.txt', dtype=None, delimiter='\t')
line1 = linecache.getline('.............Input\chm_plot_1.txt', 1)
line2 = linecache.getline('.............Input\chm_plot_1.txt', 2)
line3 = linecache.getline('.............Input\chm_plot_1.txt', 3)
line4 = linecache.getline('.............Input\chm_plot_1.txt', 4)
line5 = linecache.getline('.............Input\chm_plot_1.txt', 5)
line6 = linecache.getline('.............Input\chm_plot_1.txt', 6)
header2 = line1
header2 += line2
header2 += line3
header2 += line4
header2 += line5
header2 += line6
B = A[6:]
np.savetxt('........\out.txt', B , header = header2, delimiter='\t')
,这给了我同样的错误:
TypeError:数组dtype(' | S3973')与格式不匹配 说明符('%。18e')
A数组的第一行如下:
从第6行开始打印[0:8]#,行有100多个值,标题是前6行
['ncols 371' 'nrows 435' 'xllcorner 520298.0053'
'yllcorner 436731.3065' 'cellsize 1' 'NODATA_value -9999'
'16.52002 15.90161 15.96692 20.32922 20.59827 18.28137 18.83533 17.66 .......
'13.16687 17.09497 7.309204 20.83655 19.05078 17.68591 17.88464 ...... ']
任何帮助将不胜感激!谢谢:))
编辑:我从输入数据(chm_plot_1.txt)上传了一个样本。链接如下:http://we.tl/mjgBe4QIRM
Edit2:在回答之后,问题是它插入了"#"标题行开头的字符,如下图所示。此外,还有一条补充线,即第7条,应该被删除。
编辑3:我认为错误
ValueError:float()
的文字无效
是由于样本与完整文件中的数据格式不同。虽然两者都是.txt,但它们的排列方式不同,如下图所示。
答案 0 :(得分:1)
问题是您的标题格式与数据格式不同。
解决这个问题的方法:将标题视为普通文件文本,将数据视为数字。
with open('chm_plot_1_sample.txt') as f :
header="".join([f.readline() for i in range(6)])[:-1]
a=np.loadtxt('chm_plot_1_sample.txt',delimiter='\t',skiprows=6)
a=a/2 # some treatement
np.savetxt('out.txt',a,delimiter='\t',header=header,comments='')