我是第一次使用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")