类型错误:数组 dtype ('<U32') 和格式说明符 ('%.18e') 不匹配



我是第一次使用np.savetxt,我正在尝试将两个变量(字符串和浮点数(保存在名为"trial.csv"的文件中,如下所示:

import numpy as np
RT = 2.76197329736740
key_name = 'space'
print(RT,key_name)
# Save data in a CSV file named subj_data_file
np.savetxt("trial.csv", (RT,key_name), delimiter=',', header="RTs,Key_Name")

我收到以下错误:

TypeError: Mismatch between array dtype ('<U32') and format specifier ('%.18e')

我不明白('<U32')('%.18e')的含义.事实上,当我有浮点数、整数和字符串时,我不明白如何使用fmt......

这是一个简化的示例,但具体来说,我将 RT 值(浮点数(放在一列"RTs"中,key_name(浮点数(值放在另一列"Key_Name"中。稍后我将创建更多列,尽管在此示例中我为 RT 提供了一个值,为key_name提供了一个值,但"RTs"列中将有更多的 RT 值以及"Key_Name"列中的键名称。

发生这种情况是因为np.savetxt()中的默认fmt参数是'%.18e',适用于数字(整数/浮点数(。如果还想保存字符串,则需要将fmt参数更改为'%s'

此外,您需要更改X形状以反映它是一行两列的事实。因此,您需要将np.savetxt更改为如下所示:

np.savetxt("trial.csv", [[RT, key_name]], fmt="%s", delimiter=',', header="RTs,Key_Name")

这意味着所有内容都将保存为字符串。因此,2.761..的值不会是浮点数。您可以像这样加载此文件:

np.loadtxt("trial.csv",delimiter=',', dtype=str) #notice assiging dtype to str
import numpy as np
names  = np.array(['NAME_1', 'NAME_2', 'NAME_3'])
floats = np.array([ 0.1234 ,  0.5678 ,  0.9123 ])
ab = np.zeros(names.size, dtype=[('key_name', 'U6'), ('RT', float)])
ab['key_name'] = names
ab['RT'] = floats
np.savetxt('trial.csv', ab, fmt="%10s , %10.3f", header="Keys_Names,RTs")

最新更新