矩张量反演中字符串转浮点及数组类型转换错误的求助
矩张量反演中字符串转浮点及数组类型转换错误的求助
各位好,我最近在做矩张量反演的工作,需要先给数据生成头文件,再用这个头文件跑反演流程,但现在遇到了一个类型转换错误:Cannot cast array data from dtype('O') to dtype('float64'),卡了好一会儿没解决,想请大家帮忙看看。
先给大家说下我的操作:我用下面的代码生成头文件字典:
# Create headers headers = dict(datetime=df["origin"][0], longitude=df["lon"][0], latitude=df["lat"][0], depth=",".join([ "%.4f"%d for d in depths]), path_to_data=event_dir, path_to_green=green_dir, green="herrmann" )
错误提示说没法把dtype('O')(查了下应该是Python对象类型,这里我猜是因为depth字段是字符串)转换成浮点型数组。我怀疑问题出在depth的处理上——我把原本的深度数组用逗号拼接成了字符串,但反演的核心代码应该期望接收的是浮点型的数组,而不是字符串。
我自己想到的几个可能的解决方向:
- 直接给
depth传浮点数组,不做字符串拼接:# 保持depth为浮点数组类型,显式指定类型确保是float64 headers = dict(datetime=df["origin"][0], longitude=df["lon"][0], latitude=df["lat"][0], depth=np.array(depths, dtype=np.float64), path_to_data=event_dir, path_to_green=green_dir, green="herrmann" ) - 如果反演代码必须要求depth是字符串格式,那后续用到这个字段的时候,得先把字符串拆分成单个元素,再逐个转成浮点:
# 后续读取headers['depth']时做转换 depth_values = np.array([float(d_str) for d_str in headers['depth'].split(',')], dtype=np.float64)
另外我也在想,会不会df["lon"][0]或者df["lat"][0]这些字段本身是字符串类型的数值?如果是这样的话,也可能导致后续传递时出现对象类型的问题,不过目前看错误提示是指向depth的概率更大。
有没有朋友遇到过类似的问题?或者有其他我没考虑到的排查点可以给我提提吗?
备注:内容来源于stack exchange,提问作者op1
相关产品推荐
相关产品推荐

