TypeError: 数组 dtype ('|S32') 和格式说明符 ('%.7f %.7f %.7f %s') 不匹配
Posted
技术标签:
【中文标题】TypeError: 数组 dtype (\'|S32\') 和格式说明符 (\'%.7f %.7f %.7f %s\') 不匹配【英文标题】:TypeError: Mismatch between array dtype ('|S32') and format specifier ('%.7f %.7f %.7f %s')TypeError: 数组 dtype ('|S32') 和格式说明符 ('%.7f %.7f %.7f %s') 不匹配 【发布时间】:2021-02-23 14:34:11 【问题描述】:我将一些变量堆栈保存到 .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 变量,所以将来我可以设法重新调整它,但为了快速浏览,拥有它真的很有帮助它也在文件中。
谁能帮助我?
提前致谢。
【问题讨论】:
查看zipped
,然后再尝试在savetxt
中使用它
np.savetxt
保存一个 numpy 数组,而不是一个 zip
对象。它将首先尝试将参数转换为数组。您是否尝试过遍历 zipped
并直接写入每一行(使用该格式)?
【参考方案1】:
一个更简单的例子:
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))
但我认为直接写入文件会更容易(并且同样快)。
【讨论】:
以上是关于TypeError: 数组 dtype ('|S32') 和格式说明符 ('%.7f %.7f %.7f %s') 不匹配的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:在绘制 seaborn.regplot 时,无法根据规则“安全”将数组数据从 dtype('int64') 转换为 dtype('int32')
pandas 比较引发 TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较
TypeError:数组 dtype 和格式说明符不匹配。如何将具有不同值类型的数据框保存为 txt 文件?
Scipy hstack 导致“TypeError:类型不支持转换:(dtype('float64'),dtype('O'))”