如何解决类型错误:数组 dtype ('|S32') 和格式说明符 ('%.7f %.7f %.7f %s') 之间不匹配
我正在堆栈中将一些变量保存到 .dat 文件中。 我有 4 个 numpy 数组构建如下:其中 3 个包含浮点数,一个包含时间字符串。这是所有 numpy.ndarray 的 type(np.array[n]) 输出:
<type 'numpy.float64'> <type 'numpy.float64'> <type 'numpy.float64'> <type 'numpy.string_'>
最后一个数组是用 datetime 模块构建的:
hr_time.append(datetime.datetime.fromtimestamp(time_unix).strftime("%Y-%m-%d %H:%M:%S.%f"))
然后我使用 zip 和 np.savetxt 如下:
zipped = zip(lat,lon,time_unix,hr_time)
np.savetxt("shadow_orbit.dat",zipped,fmt='%.7f %.7f %.7f %s')
我收到以下错误:
in savetxt
% (str(X.dtype),format))
TypeError: Mismatch between array dtype ('|S32') and format specifier ('%.7f %.7f %.7f %s')
实际上对我来说并不是必须这样保存文件,我可以只保存其中三个。事实上,正如您可以从代码中争辩的,hr_time 只是一个字符串,以一种更易读的方式显示 time_unix 变量,因此将来我可以设法重新调整它,但是快速浏览一下,这将非常有帮助它也在文件中。
有人能帮我吗?
提前致谢。
解决方法
一个更简单的例子:
In [93]: x,y = np.arange(4),np.array(['A','B','C','D'])
In [94]: zipped=zip(x,y)
In [95]: zipped
Out[95]: <zip at 0x7fe56f41a780>
zip
生成类似“生成器”的对象。 list(zipped)
以实际查看元组。
np.savetxt
从 numpy 数组写入:
In [96]: np.array(zipped)
Out[96]: array(<zip object at 0x7fe56f41a780>,dtype=object)
但是你可以直接编写压缩的元组:
In [97]: for row in zipped:print('%.5f %s'%row)
0.00000 A
1.00000 B
2.00000 C
3.00000 D
只需用文件写入替换打印即可。
np.savetxt
做了类似的事情
for row in arg:
f.write(fmt%tuple(row))
但我认为直接写入文件会更容易(而且速度也一样快)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。